换钱计划调用函数c语言编程,CCF NOI1034 钞票兑换

该博客介绍了如何利用穷举法解决将整百元钞票兑换成10元、20元、50元小钞的组合问题。通过分析输入的金额,计算出不同面额钞票的组合总数,避免超时错误。程序提供了两种实现,一种是快速得出答案但可能超时,另一种是完全穷举但效率较低。
摘要由CSDN通过智能技术生成

时间限制: 1000 ms  空间限制: 262144 KB

题目描述

将任意给定的整百元钞票,兑换成10元、20元、50元小钞票形式。输出兑换方案总数。

输入

输入需要兑换的钞票总数n。

输出

输出方案总数。

样例输入

100

样例输出

10

数据范围限制

100<=n<=1000000

问题分析

这是一个组合问题,可以用穷举法来解决。

根据输入的n,可以算出50元钞票的最多张数,然后假设50元钞票的张数为i,计算所有的组合。

其实,假定50元的钞票有i张,那么这种情况下的方案数就能算出来了。如果全部都用试探法去计算,则会出现超时的情况。

“钞票总数”的说法容易令人误解,说金额要好理解一些。

程序说明

(略)

要点详解

先用数学思考一下,然后再用程序的方法解决。

参考链接:(略)。

100分通过的C语言程序:

#include

#define BILL50 50

#define BILL20 20

#define BILL10 10

int main(void)

{

int n, count, i, end;

scanf("%d", &n);

count = 0;

end = n / BILL50;

for(i=0; i<=end; i++)

count += (n - i * BILL50) / BILL20 + 1;

printf("%d\n", count);

return 0;

}

80分LTE(超时)的C语言程序:

#include

#define BILL50 50

#define BILL20 20

#define BILL10 10

int main(void)

{

int n, count, i, j, end1, end2;

scanf("%d", &n);

count = 0;

end1 = n / BILL50;

for(i=0; i<=end1; i++) {

if(i * BILL50 == n) {

count++;

continue;

}

end2 = (n - i * BILL50) / BILL20;

for(j=0; j<=end2; j++) {

if(i * BILL50 + j * BILL20 == n) {

count++;

continue;

}

if((n - i * BILL50 - j * BILL20) % BILL10 == 0)

count++;

}

}

printf("%d\n", count);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值