题目描述:
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数 n n n ( n ≤ 1000 n≤1000 n≤1000),然后对此自然数按照如下方法进行处理:
1.不作任何处理;
2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.
输入输出格式:
输入格式:
一个自然数 n n n ( n ≤ 1000 n≤1000 n≤1000)
输出格式:
1个整数,表示具有该性质数的个数。
输入输出样例:
输入样例 | 输出样例 |
---|---|
6 | 6 |
满足条件的数为6,16,26,126,36,136。
解题思路:
n | 2 | 4 | 6 | 8 | 10 |
3 | 5 | 7 | 9 | 11 | |
满足个数 | 2 | 4 | 6 | 10 | 14 |
可得当N为偶数时:N满足的个数= 等于
1
2
N
\frac{1}{2} N
21N 满足的个数 + N-1满足的个数
可得当N为奇数时:N满足的个数= 等于
1
2
N
\frac{1}{2} N
21N 满足的个数 + N-2满足的个数
源代码:
#include<iostream>
using namespace std;
int main()
{
int n,i, a[2000];
cin >> n;
a[0] = 1;
a[1] = 1;
a[2] = 2;
a[3] = 2;
for (i = 4; i <= 1000; i++)
{
if (i % 2 == 0)
a[i] = a[i / 2] + a[i - 1];
else
a[i] = a[i/ 2] + a[i - 2];
}
cout << a[n];
}