Contest2037 - CSU Monthly 2013 Oct (problem A 1318 :Small change)
你为何这么叼!
1318: Small change
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 174 Solved: 102
[Submit][Status][Web Board]
Description
打完网赛,就到了晚饭的时间,但CSU_ACM的同学们都已经没力气出去了,这时CX建议大伙一起点餐吧,因为正是饭点,CX为了不让大家等太久,找了一个承诺20分钟送到超时要打折的外卖。但CX的RP都在网赛上用光了,果然送餐的迟到了,按规定咱们是要少给钱的。可是那些送餐员十分的狡猾,他们没有带零钱,于是乎,原价为N元的饭,由于他们的迟到可能需要降价,这些狡猾的送餐员会随机报一个数∈(1,N),如果CSU_ACM的小基友没有恰好这么多钱的话,送餐员还是按原价收取饭钱。为了CSU_ACM的最大利益,想知道最少由多少张钞票可以应对送餐员的任意要求(每张钞票的价值可为任意正整数),不论送餐员报的数字为多少总能给出相应的零钱。
Input
多组数据(不超过20组),输入到文件结束。
输入为CSU_ACM的小基友们点餐的总价N.(1<=N<=100000)
Output
输出为CSU_ACM的小基友们准备的零钱的最少张数。每个测试数据一行。
Sample Input
1
2
5
Sample Output
1
2
3
HINT
CSU_ZZY
Source
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 #define ll long long 6 #define maxn 200005 7 int n,m; 8 int a[maxn]; 9 void init(){ 10 int k=1; 11 a[0]=0; 12 for(int i=1;i<100005;i++) 13 if(i>=k){k*=2;a[i]=a[i-1]+1;} 14 else a[i]=a[i-1]; 15 } 16 int main(){ 17 init(); 18 while(~scanf("%d",&n)) 19 printf("%d\n",a[n]); 20 return 0; 21 }
浙公网安备 33010602011771号