zoukankan      html  css  js  c++  java
  • python CG练习题

    输入方式

    a, b, c = map(float, input().split()) 
    alist = list(map(int, input().split())) 
    n = int(input())

    #数组
    for i in range(n):
    Y[i] = int( input() )

    import numpy A=numpy.array(list(map(int, input().split())))
    s = str.split()
    arr = np.array(s, dtype=int)
    #二维数组

    arr = [[0] * n] * n
    for i in range(n):
        arr[i] = input().split(" ")
    arr[i] = [int(j) for j in arr[i]]


    # 创建一个 5x3 的数组
    x1 = np.arange(15).reshape((5, 3))
    x1[2][2]= 999
    print(x1)


    
    

    #
     

    递归-全排列

    import numpy
    def Output(alist):
        res = numpy.array(alist)
        print(res)
    
    def PERM(alist,sta,end):
        if sta==end: Output(alist)
        else:
            for i in range(sta,end):
                alist[sta],alist[i] = alist[i] ,alist[sta]
                PERM(alist,sta+1,end)
                alist[sta], alist[i] = alist[i],alist[sta]
    
    alist = list(map(int, input().split()))
    PERM(alist,0,len(alist))

    迭代法求函数的根

    import numpy as np
    
    def cal(k):
        return k**5 - k*2 - 1
    
    def Find( n ):
       Y = np.linspace(alist[0], alist[1], 9)
       # print(Y)
       for i in range(1,9):
            if cal( Y[i-1] )*cal(Y[i]) <0:
                # print(Y[i],Y[i-1],""choose",(Y[i]+Y[i-1])/2)
                Y0.append((Y[i]+Y[i-1])/2  )
            if i<=7 and  ( ( cal( Y[i+1] ) - cal( Y[i] ) )* ( cal( Y[i] ) - cal(Y[i-1]) ) )  < 0  and abs( cal(Y[i]) ) < 0.1:
                # print("find", Y[i])
                Y0.append(Y[i])
    
    def g1(x):
        while abs( (pow( (x*2+1) ,0.2) if(x*2+1>=0) else -pow( -(x*2+1) ,0.2) ) - x ) > delta :
            x =  pow( (x*2+1) ,0.2) if(x*2+1>=0) else -pow( -(x*2+1) ,0.2)
        x = pow( (x*2+1) ,0.2) if(x*2+1>=0) else -pow( -(x*2+1) ,0.2)
        return x
    
    def g2(x):
        while abs( (pow(x,5)-1)/2-x ) > delta :
            x = (pow(x,5)-1)/2
        x = (pow(x,5)-1)/2
        return x
    
    def run(x):
        if x <-0.7 or x >0:
            res = g1(x)
        else : res = g2(x)
        # print("答案是",res)
        return res
    
    if __name__ == "__main__":
        # print("HI")
        alist = list(map(float,input().split()))
        delta = 10**(-int(alist[2]))
        Y0 = list()
        Find(8)
        Y0.sort()
        # print(Y0)
        for i in range(3):
            # print("Y0 is ",Y0[i])
            print( "%.3f" %run( Y0[i] ) )

    试值法求根

    def cal(x):
        return 12 * 300 * ((1 + x / 12) ** 240 - 1) / x - 500000
    
    
    def MID(x, y):
        return y - cal(y) * (y - x) / (cal(y) - cal(x))
    
    
    a, b, c = map(float, input().split())
    c = int(c)
    cnt = 0
    res = a
    while b - a > pow(10, -c) / 2:
        mid = MID(a, b)
        if abs(cal(mid)) < 0.0001: break
        if (cal(mid) <= 0):
            a = mid
        else:
            b = mid
        cnt = cnt + 1
    
    print(cnt)
    print(round(MID(a, b), c))

    牛顿法求根

    ee = 2.718281828459045235360287471
    def f(x):
        return 9600*( 1 - ee**( -x/15 ) ) - 480 * x
    # y=f(t)=9600*(1-e**(-t/15.0)) - 480*t;x=r(t)=2400*(1-e**(-t/15.0))
    def f_(x):
        return 9600/15* ( ee**(-x/15) ) - 480
    
    def r(x):
        return 2400*( 1 - ee**( -x/15 ) )
    
    def Cal(a):
        return a - f(a)/f_(a)
    
    if __name__ =="__main__":
        a,b,c = map( float,input().split( ) )
        # print(a,b,c)
        b = 10**(-int(b))
        c = 10**(-int(c))
        # cnt = 0
        while( abs( a-Cal(a) ) > b or abs(   f( Cal(a) ) ) > c ):
            a = Cal(a)
            # cnt = cnt + 1
            # print(cnt,a,abs( a-Cal(a) ) ,abs( f( Cal(a) ) ) ,b,c)
    
        print("%.5f"% a)
        print("%.5f" % r(a))
    
    
    
        '''
        输出错误  
    错误输出:
    8 1 1
    期望输出:
    9.08955
    1090.69211
    测试数据2    输出错误  
    错误输出:
    8 3 3
    期望输出:
    9.08790
    1090.54798
        '''

    快速排序

    import numpy
    import math
    
    def find( Thelist,s,e ):
        if( s == e ): return s
        Mid = Thelist[e]
        MinId = s
        for i in range(s,e):
            if( Thelist[i]<=Mid ):
                Thelist[i],Thelist[MinId] = Thelist[MinId],Thelist[i]
                MinId = MinId+1
        Thelist[e], Thelist[MinId] = Thelist[MinId], Thelist[e]
        print(Mid,MinId)
        return MinId
    
    def QuickSort( TheList,s,e ):
        if( s<e ):
            pos = find(TheList,s,e)
            QuickSort(TheList,s,pos-1)
            QuickSort(TheList,pos+1,e)
    
    alist = list(map(int,input().split()))
    LEN = len(alist)
    QuickSort(alist,0,LEN-1)
    print( numpy.array( alist ))
    
    '''
    【样例输入】
    
    2 8 7 1 3 5 6 4
    
    【样例输出】
    
    4 3
    
    3 2
    
    1 0
    
    8 7
    
    6 5
    
    [1 2 3 4 5 6 7 8]
    
    '''

    二分找点

    def find(l,r):
        mid = int( (l+r)/2 )
        if( l>r ) :return int(-1)
        if( A[mid]== n): return mid
        else:
            if( A[mid]<n ): return find( mid+1,r )
            return find(l,mid-1)
    
    A = list(map(int, input().split()))
    n = int(input())
    print( find(0,len(A)-1)+1 )

    归并排序

    import numpy
    import math
    def Merge(Llist,Rlist):
        res = []
        Lpos,Rpos,pos = 0,0,0
        while Lpos<len(Llist) and Rpos<len(Rlist) :
            if( Llist[Lpos] < Rlist[Rpos] ):
                res.append(Llist[Lpos])
                Lpos= Lpos + 1
            else:
                res.append(Rlist[Rpos])
                Rpos = Rpos + 1
            pos = pos + 1
        res += list( Llist[Lpos:] )
        res += list( Rlist[Rpos:] )
        return res
    
    def MergeSort( L ):
        print(numpy.array(L))
        if( len(L)<=1 ) : return L
        mid = math.ceil( len(L)/2 )
        return Merge( MergeSort( L[:mid] ), MergeSort( L[mid:] ) )
    
    alist = list(map(int,input().split()))
    print( numpy.array(MergeSort(alist)))

     二分

    def cal(x):
        return 12  * 300  * ((1 + x / 12) ** 240 - 1)/ x - 500000
    def MID(x,y):
        return x/2+y/2
        # return y - cal(y)*(y-x)/( cal(y)-cal(x) )
    
    a,b,c = map(float,input().split())
    c = int(c)
    cnt = 0
    while b-a > pow(10, -c):
        mid = MID(a,b)
        cnt = cnt + 1
        if( cal(mid)>=0 ) :  b = mid
        else: a = mid
    print(cnt)
    print( round(MID(a,b),c) )

    上三角线性方程

    import numpy as np
    
    if __name__ == "__main__":
        n = int(input())
        arr = [[0] * n] * n
        for i in range(n):
            arr[i] = input().split(" ")
            arr[i] = [int(j) for j in arr[i]]
    
        Y = [0]*n
        res = [0.0]*n
        for i in range(n):
            Y[i] =  int( input() )
    
        i = int(n-1)
        res[i] = Y[i]/arr[n-1][n-1]
        i = i - 1
        while i>=0:
            sum = int(0)
            for j in range(i+1,n):
                sum = sum + arr[i][j]*res[j]
            res[i] = ( Y[i]-sum )/arr[i][i]
            i = i-1
    
        ans = np.array(res).reshape(n,1)
        print(ans)

    select算法

    import math
    flag = 1
    
    def PARTITION(alist,l,r,x):
        pos  = l
        posx = l
        for i in range(l,r+1):
            if alist[i] <= x:
                if( alist[i]==x ):
                    posx = i
                alist[pos],alist[i] = alist[i],alist[pos]
                pos = pos + 1
        alist[pos-1],alist[posx] = alist[posx],alist[pos-1]
        return max(pos-1,l)
    
    
    def SELECT( alist,l,r,n ):
        global flag
        Len = r - l + 1
        if Len <= 10:
            alist[l:r+1] = sorted( alist[l:r+1] )
            return alist[  max(int(l+n-1),l)]
    
        #分组递归求中位数的中位数,其实就是找基准的过程
        Groups = Len//5  #这么多组
        L = l
        TemList = []
        for i in range(Groups-1):
            TemList.append( SELECT( alist,L,L+4,3 ) )
            L = L+5
        TemList.append( SELECT(alist, L, r, (r-L+2)//2 ) )
        x = SELECT(TemList , 0 , Groups-1 ,(Groups+1)//2 )  #分组后的中位数取第(num_group/2向上取整)小的元素。
        if flag == 1 :
            print(x)
            flag = 0
    
        #以x为基准寻找小于基准的下标位置q
        q = PARTITION( alist,l,r,x)
        nums = q-l+1
        if nums == n:
            return x
        elif nums>n:
            return SELECT(alist,l,q-1,n)
        return int(SELECT(alist,q+1,r,n-nums))
    
    if __name__ == "__main__":
        alist = list( map(int,input().split()) )
        n = int( input() )
        # print(alist,n)
        print( SELECT( alist,int(0),int(len(alist)-1),int(n) ) )
    
    
    '''
    测试数据1    输出错误  
    错误输出:
    2 9 8 0 7 10 1 12 3 14 5 13 6 11 4
    3
    期望输出:
    7
    2
    测试数据2    输出错误  
    错误输出: 
    32 22 28 11 24  8  9 12 10 19 36 16 39 50 14 30 21 23  3 43 46 35 17 31 18 42 44 34 27 33 15 45 29  5 13 38 26  6  0  1 47 40 41 25  7 20  2  4  37 49 48
    20
    
    期望输出:
    23
    19
    '''
  • 相关阅读:
    Python字符串
    MySQL触发器
    MySQL 1418报错解决办法
    数据库下载
    补码与反码
    二、八、十六进制之间的转换
    this 指向
    作用域 var 词法分析 arguments
    事件绑定的3种方式
    清浮动方法小结
  • 原文地址:https://www.cnblogs.com/SunChuangYu/p/12452645.html
Copyright © 2011-2022 走看看