试题描述
|
我们要求找出具有下列性质数的个数(包含输入的自然数n):先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:
1.不作任何处理; 2.在它的左边加上一个自然数,但该自然数不能超过原数的一半; 3.加上数后,继续按此规则进行处理,直到不能再加自然数为止. |
输入
|
仅包含一个数n
|
输出
|
一个数,表示满足题目描述性质的数的个数。
|
输入示例
|
6
|
输出示例
|
6
|
其他说明
|
样例说明:满足条件的数为 6 16 26 126 36 136
|
叶子数。有多种方法。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //前缀和 2 #include <iostream> 3 4 using namespace std; 5 int h[1010],s[1010]; 6 int main() 7 { 8 int n; 9 scanf("%d",&n); 10 for(int i=1;i<=n;i++) 11 { 12 h[i]=s[i/2]+1; 13 s[i]=s[i-1]+h[i]; 14 } 15 printf("%d",h[n]); 16 return 0; 17 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //递推 2 #include <iostream> 3 4 using namespace std; 5 int h[1010]; 6 int main() 7 { 8 int n; 9 scanf("%d",&n); 10 for(int i=1;i<=n;i++) 11 { 12 h[i]=1; 13 for(int j=1;j<=i/2;j++) h[i]=h[i]+h[j]; 14 } 15 printf("%d",h[n]); 16 //system("pause"); 17 return 0; 18 }