浙大版《Python 程序设计》题目集一些题目整理

  1. 第4章-15 换硬币 (20分)
    将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
    输入格式:
    输入在一行中给出待换的零钱数额x∈(8,100)。
    输出格式:
    要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
    输入样例:

    13
    

    输出样例:

    fen5:2, fen2:1, fen1:1, total:4
    fen5:1, fen2:3, fen1:2, total:6
    fen5:1, fen2:2, fen1:4, total:7
    fen5:1, fen2:1, fen1:6, total:8
    count = 4
    
    x=int(input())
    if 8<x and x<100:
        fen5=0;fen2=0;fen1=0;count=0
        fen5=int(x/5) #最多多少个5
        ##根据题目要求由内到外循环,依次求得满足条件的最大的5的个数
        while fen5>0:
            fen2=int(x/2) #最多多少个2
            while fen2>0:
                fen1=x ##最多多少个1 
                while fen1>0:
                    if fen5*5+fen2*2+fen1*1==x:
                        print("fen5:{}, fen2:{}, fen1:{}, total:{}".format(fen5,fen2,fen1,fen1+fen2+fen5))
                        count=count+1
                    fen1=fen1-1
                fen2=fen2-1
            fen5=fen5-1
        print("count = {}".format(count))
    
  2. 第4章-18 猴子选大王 (20分)
    一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
    输入格式:
    输入在一行中给一个正整数N(≤1000)。
    输出格式:
    在一行中输出当选猴王的编号。
    输入样例:

    11
    

    输出样例:

    7
    
    N=int(input())
    if N<=1000:
        #首先分配编号,设置每个猴子在的标记,如果淘汰,则换标记
        l=['n']
        for i in range(N):
            l.append('y') #y表示在,n表示淘汰,为了契合题目,从列表索引1开始
        count=0     
        while(l.count('y')>1): #如果还有一个以上的猴子则继续报数
            ##模仿规则,报数淘汰报数为3的猴               
            for i in range(1,N+1):
                if l[i]=='y':
                    count=count+1
                    if count == 3:                 
                        l[i]='n'
                        count=0
        idx=l.index('y')
        print(idx)
    
  3. 第4章-30 找完数 (20分)
    所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
    输入格式:
    输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
    输出格式:
    逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
    输入样例:

    2 30
    

    输出样例:

    6 = 1 + 2 + 3
    28 = 1 + 2 + 4 + 7 + 14
    
    import math
    m,n=map(int,input().split())
    if 1 < m and m <= n and n <= 10000:
        flag=False
        for i in range(m,n+1):
            l=[1]
            for j in range(2,int(math.sqrt(i))+1):
                if i%j==0:
                    l.append(j)
                    if j*j!=i:
                        l.append(i//j)
            if sum(l)==i:
                flag=True
                l.sort()
                print("{} = {}".format(i,l[0]),end="")
                for j in l[1:]:
                    print(" + {}".format(j),end="")
                print()
        if(flag == 0):
            print("None")
    
  4. 第5章-11 字典合并 (40分)
    字典合并。输入用字符串表示两个字典,输出合并后的字典,字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!
    输入格式:
    在第一行中输入第一个字典字符串 在第二行中输入第二个字典字符串
    输出格式:
    在一行中输出合并的字典,输出按字典序。"1"的ASCII吗为49,大于1,排序时1在前,"1"在后,其它的也一样。
    输入样例1:

    {1:3,2:5}
    {1:5,3:7} 
    

    输出样例1:

    {1:8,2:5,3:7}
    

    输入样例2:

    {"1":3,1:4}
    {"a":5,"1":6}
    

    输出样例2:

    {1:4,"1":9,"a":5}
    
    dic1=eval(input())
    dic2=eval(input())
    
    for k2,v2 in dic2.items():
        if dic1.get(k2) == None:
            dic1[k2]=v2
        else:
            dic1[k2]=dic1[k2]+v2
    print("{",end="")
    l1=[i for i in dic1.keys() if type(i)==type(1)]
    l2=[i for i in dic1.keys() if type(i)==type('a')]
    l1.sort()
    l2.sort()
    cnt=0
    ##这里的重点就是控制输出
    for i in l1+l2:
        cnt=cnt+1
        if type(i)==type(1):
            print("{}:{}".format(i,dic1[i]),end="")
        elif type(i)==type('a'):
            print('"{}":{}'.format(i,dic1[i]),end="")
        if cnt<len(dic1):
            print(",",end="")
    print("}")
    

猜你喜欢

转载自blog.csdn.net/weixin_43489041/article/details/111399891