数的计数

阅读量: 133 编辑

我们要求找出具有下列性质数的个数(包括输入的自然数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;
}
爱码岛编程公众号
试卷资料
爱码岛编程小程序
在线刷题
苏ICP备13052010号
©2023 南京匠成信息科技有限公司