1316:【例4.6】数的计数(Noip2001)
时间限制: 1000 ms 内存限制: 65536 KB
提交数:46016 通过数: 19963
【题目描述】
我们要求找出具有下列性质数的个数(包括输入的自然数n)。先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:
不作任何处理;
在它的左边加上一个自然数,但该自然数不能超过原数的一半;
加上数后,继续按此规则进行处理,直到不能再加自然数为止。
【输入】
自然数n(n≤1000)。
【输出】
满足条件的数。
【输入样例】
6
【输出样例】
6
【提示】
【样例解释】
满足条件的数为如下所示:
6
16
26
126
36
136
【原题链接】信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)https://ybt.ssoier.cn/problem_show.php?pid=1316
#include <iostream>
#define N 1010
long long h[N];
int main()
{
int i, j, n;
scanf("%d", &n);
for (i = 1; i <= n; i++) //按照递增顺序计算扩展出的自然数的个数
{
h[i] = 1; //扩展出的自然数包括 i本身
for (j = 1; j <= i / 2; j++) //i左边分别加上 1…自然数[i/2],按规则扩展出的自然数
h[i] += h[j];
}
printf("%lld\n", h[n]);
return 0;
}