1213: 半数集问题
时间限制: 1 Sec 内存限制: 128 MB题目描述
问题描述:
给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下。
(1) n∈set(n);
(2) 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
(3) 按此规则进行处理,直到不能再添加自然数为止。
例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6 个元素。
注意半数集是多重集。
编程任务:
对于给定的自然数n,编程计算半数集set(n)中的元素个数。
输入
输入数据m行,每行给出一个整数n。(0〈n〈1000)
输出
输出只有m行,每行给出半数集set(n)中的元素个数。
样例输入
6
99
样例输出
6
9042
提示
来源
分析:水题,先 打表计算出所有的答案,然后根据输入的数直接输出。
CODE:
#include <iostream>
using namespace std;
int main()
{
int n,dp[1000]={0};
for(int i=1;i<1000;i++){
for(int j=1;j<=i/2;j++){
dp[i]+=dp[j];
}
dp[i]+=1;
}
while(cin>>n){
cout<<dp[n]<<endl;
}
return 0;
}