题目描述
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:
1.不作任何处理;
2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.
输入
自然数n
输出
满足条件的数的个数
样例输入Copy
6
样例输出Copy
6
提示
满足条件的数为
6
16
26
126
36
136
代码:
#include<iostream>
#include<iomanip>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long ans[1001];
long long lzp(long long n){
if(ans[n]){
return ans[n];
}
for(long long i=1;i<=n/2;i++)ans[n]+=lzp(i);
return ++ans[n];
}int main(){
long long n;
cin>>n;
cout<<lzp(n);
return 0;
}