博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CCF NOI1034 钞票兑换
阅读量:7227 次
发布时间:2019-06-29

本文共 1319 字,大约阅读时间需要 4 分钟。

问题链接


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

题目描述

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

输入

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

输出

  输出方案总数。

样例输入

100

样例输出

10

数据范围限制

  100<=n<=1000000


问题分析

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

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

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

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

程序说明

  (略)

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


参考链接:(略)。

100分通过的程序:

#include 
#define BILL50 50#define BILL20 20#define BILL10 10int 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(超时)的程序:

#include 
#define BILL50 50#define BILL20 20#define BILL10 10int 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;}

转载于:https://www.cnblogs.com/tigerisland/p/7563910.html

你可能感兴趣的文章
[case分享]Exchange 2010 登陆OWA查看邮件出现Rights managem operation failed
查看>>
linux dd 读取 写入磁盘速度
查看>>
dmidecode查看linux硬件信息
查看>>
linux监控对象及重要性
查看>>
walle-web自动化部署配置
查看>>
opencv轮廓提取、轮廓识别相关要点
查看>>
BOOST.ASIO源码剖析(一)
查看>>
过滤squidlog中各个链接的大小
查看>>
我的友情链接
查看>>
使用AnyChat如何实现任意两用户之间的音视频交互
查看>>
【个人小结】项目公共js的配置,解决不同页面多个配置修改的问题
查看>>
XAMP安装Apacher无法启动
查看>>
mongodb user
查看>>
ip地址子网划分
查看>>
Linux下快速搭建ntp时间同步服务器
查看>>
TouchEvent的传递过程学习笔记
查看>>
Android笔记--TCP Scoket(字符串收发)
查看>>
我的友情链接
查看>>
Hunt framework 2.0.0 发布,简单且高性能的 Web 服务框架
查看>>
数据库原理及应用(SQL Server 2016数据处理)【上海精品视频课程】
查看>>