题目描述
我们要求找出具有下列性质数的个数(包括输入的自然数n
)。先输入一个自然数n(n≤1000)
,然后对此自然数按照如下方法进行处理:
-
不作任何处理;
-
在它的左边加上一个自然数,但该自然数不能超过原数的一半;
加上数后,继续按此规则进行处理,直到不能再加自然数为止。
输入格式
自然数n(n≤1000)
。
输出格式
满足条件的数。
样例
输入样例复制
6 满足条件的数为 6(此部分不必输出)
16
26
126
36
136
输出样例复制
6
这道题不难,可以用递推
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[1005]={0,1,2};
int f(int n){
if(a[n]!=0) return a[n];
if(n%2!=0) a[n]=f(n-1);
else a[n]=f(n-1)+f(n/2);
return a[n];
}
int main(){
int n;
cin>>n;
cout<<f(n);
return 0;
}