我们要求找出具有下列性质数的个数(包括输入的自然数n)。
先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:
1、不作任何处理;
2、在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3、加上数后,继续按此规则进行处理,直到不能再加自然数为止;
【输入描述】
输入一个自然数n(n≤1000)。
【输出描述】
满足条件的数。
【输入样例】
6
// 输出解释
6个数,如下:
6
16
26
126
36
136
【参考程序】100分解法
// 爱码岛编程(递推算法 AC 100分)
/**
还是用递推,只要作仔细分析,其实我们还可以得到以下的递推公式;
1、当 i 为奇数时,h(i)=h(i-1);
2、当 i 为偶数时,h(i)=h(i-1)十h(i/2)
*/
// 爱码岛编程
#include <bits/stdc++.h>
using namespace std;
const int MANX = 1005;
long long f[MANX];
int main() {
int i, j, n;
cin >> n;
arr[1] = 1;
for (i = 2; i <= n; i++) {
f[i] = f[i - 1];
if (i % 2 == 0)
f[i] = f[i - 1] + f[i / 2];
}
cout << f[n];
return 0;
}
【参考程序】80分解法
// 爱码岛编程(递归算法 80分,最后一组超时)
#include <bits/stdc++.h>
using namespace std;
int ans = 0;
void js(int n) {
ans++;
if (n > 1) {
int i = 1;
while (i <= n / 2) {
js(i);
i++;
}
}
}
int main() {
int n;
cin >> n;
js(n);
cout << ans;
return 0;
}