UESTC--1264--人民币的构造(数学规律)
2024-09-25 18:50:02
Time Limit: 1000MS | Memory Limit: 65535KB | 64bit IO Format: %lld & %llu |
Description
我们都知道人民币的面值是$1、2、5、10$,为什么是这个数值呢,我们分析了下发现,从$1-10$的每个数字都可以由每种面值选出至多一张通过加法和减法(找钱)来构成,(比如:$1+2=3,5-1=4,5+1=6,5+2=7,1+2+5=8,10-1=9$)
但是实际上,我们只需要$1、2、7$三种面值就可以组成$1-10$的每一个数字了
($1+2=3,7-1-2=4,7-2=5,7-1=6,7+1=8,7+2=9,7+1+2=10$)
那么现在问题来了,给一个数$n$,请问最少需要多少种不同的面值就可以构成从$1-n$的所有数字,注意在构成每一个数字时同种面值不能超过$1$张。
Input
一个数字$n$(1<=$n$<=100000)
Output
一个数字,代表最少需要多少种不同的面值可以构成从$1-n$的所有数字。
Sample Input
10
Sample Output
3
Hint
Source
第七届ACM趣味程序设计竞赛第三场(正式赛)
这个规律也真是够了!!
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum=13,t=0;
int cnt=3;
while(sum+t<n)
{
sum+=t;
t=sum;
sum=2*t+1;
cnt++;
}
if(n==1)
printf("1\n");
else if(n<=4)
printf("2\n");
else if(n<=13)
printf("3\n");
else printf("%d\n",cnt);
}
return 0;
}
最新文章
- yii2权限控制rbac之rule详细讲解(转)
- 求CRC校验和的低位和高位的两种方式
- css行内样式
- python 字符串处理
- 一天搞定CSS:css选择器--07
- 跨域请求CORS
- JAVA基础-File类
- C#设计模式(7)——适配器模式(Adapter Pattern)(转)
- Angular $interval
- 利用Tensorflow实现卷积神经网络模型
- kali更新失败
- 7个提高效率的JavaScript调试工具
- C#的ThreadStart 和 Thread
- MATLAB 设置文件的相对路径
- 无法加载 DLL“ParkCOM.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E) 终结者
- 移动端H5适配方法(盒子+图片+文字)
- python渗透测试工具包
- 132页Filter代码分析
- Oracle 数据库实现数据更新:update、merge
- 8086汇编之 CALL 和 RET指令