欢迎光临
我们一直在努力

4-15换硬币

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式:

输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式:

要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
 

运用了两种方法,一种优化的枚举法,一种穷举法(也是枚举法)。

x=int(input())
count=0
total=0
for f5 in range((x-3)//5,0,-1):
for f2 in range((x-5*f5-1)//2,0,-1):
f1=x-5*f5-2*f2
if f1>=1:
count+=1
total=f5+f2+f1
print(f'fen5:{f5}, fen2:{f2}, fen1:{f1}, total:{total}')
print(f'count = {count}')

x=int(input())
count=0
total=0
for f5 in range(x//5,0,-1):
for f2 in range(x//2,0,-1):
for f1 in range(x,0,-1):
if 5*f5+2*f2+f1==x:
count+=1
total=f5+f2+f1
print(f'fen5:{f5}, fen2:{f2}, fen1:{f1}, total:{total}')
print(f'count = {count}')

方面代码1(优化法)代码2(穷举法)
循环层数 2层 3层
循环次数 少(精确范围) 多(所有可能)
计算f1的方式 公式计算 循环遍历
判断条件 f1≥1 5f5+2f2+f1==x
效率 低(尤其x大时)

且输入数字13时,代码1用时12ms,代码2用时22ms。代码1效率显著更高。

赞(0)
未经允许不得转载:171主机测评 » 4-15换硬币
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址