2001年NOIP全国联赛普及组
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:
1. 不作任何处理;
2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.
一个数n
满足条件的数的个数
6
6个数分别是:
16
26
126
36
136
int f(int n){ //表示n时结果的递归函数 int s=1; //注意n本身也要计入,s初始化为1 for(int i=1; i<=n/2; i++) //最大不超过n/2 s的增加写在哪里? 就在这行要体现出题目要求的运算 s+=f(i); return s; } int main(){ int n; cin>>n; cout<<f(n)<<endl; return 0; }