算法标签:递推
题目描述
我们要求找出具有下列性质数的个数(包含输入的自然数nnn): 先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理; 2.在它的左边加上一个自然数,但该自然数不能超过原数的一半; 3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.
输入格式
1个自然数n(n≤1000)
输出格式
1个整数,表示具有该性质数的个数。
输入输出样例
输入 #1
6
输出 #1
6
说明/提示
满足条件的数为
6,16,26,126,36,136
题目代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[1010] = {0};
arr[0] = arr[1] = 1;
// 0 1,1 1,2 2, 3 2, 4 3, 5 3;
// 递推
int n;
cin >> n;
for (int i = 2; i <= n; i++)
if (!(i % 2))
arr[i] = arr[i - 1] + arr[i / 2];
else
arr[i] = arr[i - 1];
cout << arr[n];
return 0;
}