数的计算(c++)

文章描述了一个计算问题,给定一个正整数n,需要找出所有可以通过在左边添加不超过原数一半的正整数,且按题目规则处理后仍满足条件的数字个数。解题策略是使用递推方法,通过累加从1到n/2的情况得到答案,存储在数组f中,最后输出f[n]的结果。
摘要由CSDN通过智能技术生成

数的计算

题目描述

我们要求找出具有下列性质数的个数(包含输入的正整数 n)。

先输入一个正整数 n(n≤1000),然后对此正整数按照如下方法进行处理:

1、不作任何处理;

2、在它的左边加上一个正整数,但该正整数不能超过原数的一半;

3、加上数后,继续按此规则进行处理,直到不能再加正整数为止。

输入格式

1 个正整数 n(n≤1000)

输出格式

1 个整数,表示具有该性质数的个数。

输入输出样例

输入 #1

6

输出 #1

6

说明/提示

满足条件的数为

6,16,26,126,36,136

解题思路

目标

输入一个数字,求这个数字按照题目中的方法处理,总共会有多少个满足条件的数字

分析

首先,我们从最简单的开始分析:

当n等于1的时候,只有一种情况 1

当n等于2的时候,有两种情况 2、12。也就是2本身的一种情况,加上前面加2的一半向下取整的所有情况

当n等于3的时候,有两种情况 3、13。 也就是3本身的一种情况,加上前面加3的一半向下取整的所有情况

当n等于4的时候,有4、14、24、124 四种情况。也就是4本身的一种情况,加上前面1到4的一半向下取整的所有情况。

当n等于5的时候,有5、15、25、125 四种情况。也就是5本身的一种情况,加上前面1到5的一半向下取整的所有情况。

当n等于6的时候,有6、16、26、126、36、136六种情况。也就是6本身的一种情况,加上前面1到6的一半向下取整的所有情况。

通过前面的分析,我们不难看出,这个题目可以使用递推的一个方法来做,f(n)应该是等于从n等于1的情况到等于n/2的情况一直累加起来的和,然后加上n本身的情况。

1、首先定义一个变量n用来保存要求的数字,定义一个int整型的数组f[1001]用来保存每一种情况的数量。

2、输入变量n,然后我们就可以从第一种情况开始依次按照递推关系式来求,先是把从1到等于一半的情况都累加起来,然后自增依次,加上这个数字本身的情况。

3、最后输出f[n]。

代码

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    int f[1001];
    cin >> n;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=i/2; j++){
            f[i]+=f[j];
        }
        f[i]++;
    }
    cout << f[n];
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值