蓝桥杯第十四届青少年Python组省赛试题--第3题

提示信息:
合数:合数指自然数中除了能被1和本身整除外,还能被其它正整数整除的数。
例如4,4除了能被1和4整除,还可以被2整除。

编程实现:
小明收藏了N(2≤N≤25)个数字币,每个数字币上都有一个面值(面值可以重复)。从数字币中任选K(2≤K≤N)个,有多种选法,请将每次选择的数字币上的面值累加,然后解决以下两个问题。
问题1:累加的和中有多少种不同的结果;
问题2:累加的和中有多少个不同的合数。
例如:N=5,K=3,5个数字币上的面值分别为2、1、4、5、3,任选3个数字币,有10种选法,将每种选法上的面值累加:
2+1+4=7、2+1+5=8、2+1+3=6、2+4+5=11、2+4+3=9、2+5+3=10、1+4+5=10、1+4+3=8、1+5+3=9、4+5+3=12。
其中累加的和中有7种不同的结果,分别是7、8、6、11、9、10、12,
累加的和中有5个不同的合数,分别是8、6、9、10、12。

输入描述
第一行输入一个正整数N(2≤N≤25),表示数字币的个数
第二行输入N个正整数(1≤正整数≤1000),表示数字币上的面值,正整数之间以一个英文逗号隔开
第三行输入一个正整数K(2≤K≤N),表示所要选取的数字币个数

输出描述
输出两个整数,分别表示累加的和中不同结果的个数以及累加的结果中不同合数的个数,两个整数之间以一个英文逗号隔开

样例输入
5
2,1,4,5,3
3

样例输出
7,5

n=int(input())
ns=list(map(int,input().split(',')))
num=int(input())
needs=[]
def f(num,nns=[]):
    if num==0:
        needs.append(sum(nns))
        nns.pop()
    else:
        for n in ns:
            if n not in nns:
                nns.append(n)
                f(num-1,nns)
        if nns!=[]:
            nns.pop()      
f(num)
rs=list(set(needs))
cnt=0
for r in rs:
    mark=True
    for i in range(2,r):
        if r%i==0:
            mark=False
    if not mark:
        cnt+=1
print(len(rs),cnt,sep=',')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值