python编程练习(六)

一:向量表示

各个单词出现频率按从小到大的顺序排列后,即构成了用户输入内容的向量表示。

# 向量表示
# [1, 1, 2]按要求输出1 1 2
while True:
    # arrr=map(str,raw_input().split())        # 这句会报错????
    arr=raw_input().strip().split(' ')
    # arrr1=set(arrr)
    arr1=set(arr)
    res=[]
    for i in arr1:
        res.append(arr.count(i))
    res.sort()
    st=''
    for i in res:
        st+=str(i)+' '
    print st

二:组合概率

零件的序号代表了零件的等级,比如5号零件可以由1号和4号零件组合而成,也可以有2号和3号零件组合而成。现有一个序号为 x 的零件,它是由 n 个序号在[a,b]区间内的零件组合而成,求n 个序号在[a,b]区间内的零件组合为 x 零件的概率。

n,a,b,x=map(int,raw_input().split())     # x有n个序号的和,x的值在[a,b]之间
all,res=0,0
def getfor(a,b,n,x):
    global all, res
    if n==0:
        all+=1
        if x==0:
            res+=1
    else:
        for i in range(a,b+1):
            getfor(a, b, n - 1, x - i)
getfor(a,b,n,x)
print(res,all)
print '%.4f'%(float(res)/all)

三:简单计算

这题不看,给个流氓答案

while 1:
    s = raw_input().replace('^',"**")
    print eval(s)

四:格子游戏

有n个格子,从左到右放成一排,编号为1-n。
共有m次操作,有3种操作类型:
1.修改一个格子的权值,
2.求连续一段格子权值和,
3.求连续一段格子的最大值。
对于每个2、3操作输出你所求出的结果。

n,m=map(int,raw_input().split())
arr=[]
for _ in range(n):
    arr.append(int(raw_input()))
for _ in range(m):
    arr1=map(int,raw_input().split())
    if arr1[0]==1:
        arr[arr1[1]-1]=arr1[2]
    elif arr1[0]==2:
        print sum(arr[arr1[1]-1:arr1[2]])
    else:
        print max(arr[arr1[1] - 1:arr1[2]])

五:军训队列

从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的依次向前靠拢,继续从头开始进行一至二报数。。。以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

# 要理解【从头开始一至二报数,凡报到二的出列】是从头到尾计算的
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# 1 3 5 7 9 11 13 15 17 19   -->去掉2的倍数
# 1 3 7 9 13 15 19           -->去掉3的倍数
# 1 7 13 19                  -->去掉2的倍数
# 1 7 19                     -->去掉3的倍数
N=int(raw_input())
def delnum(m):
    res=range(1,m+1)
    if m<=3:
        return res
    else:
        i=2
        while m>3:
            print res
            flag=0
            for j in range(m):
                if (j+1)%i==0:
                    res.pop(j-flag)
                    flag+=1
            m=len(res)
            if i==2:
                i=3
            else:
                i=2
        return res
for _ in range(N):
    m=int(raw_input())
    res=delnum(m)
    string=''
    for i in res:
        string+=str(i)
        string+=' '
    print string

六:蛇形填数

在n*n方阵里填入1,2,…,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

n=int(raw_input())
def getres(n):
    res = [[0 for _ in range(n)] for _ in range(n)]
    O=n/2+n%2    # 多少圈
    num=1
    for o in range(O):
        for i in range(o,n-o):
            # print i,n-o-1,num
            res[i][n-o-1]=num
            num+=1
        if n-o-1<=o:
            return res
        for j in range(n-o-2,o-1,-1):
            # print n-o-1,j,num
            res[n-o-1][j]=num
            num+=1
        for i in range(n-o-2,o-1,-1):
            # print i,o,num
            res[i][o]=num
            num+=1
        if o+1>=n-o-1:
            return res
        for j in range(o+1,n-o-1):
            # print o,j,num
            res[o][j]=num
            num+=1
arr=getres(n)
for i in arr:
    print(" ".join([str(x) for x in i]))

猜你喜欢

转载自blog.csdn.net/qq_27163197/article/details/80887446
今日推荐