💥前言
☀️大家好☀️,我是烧蔬菜😁,最近做算法题可以感受到自己确实有点懈怠了😐,所以给自己定一个百日刷题计划,希望自己可以一直坚持下去💪,每天做题,也把题题解写下,记录自己每天的做题痕迹来激励提升自己获取正反馈✊,并且与大家分享下去😁
😉解题报告
💥[NOIP2001 普及组] 数的计算
☘️ 题目描述☘️
我们要求找出具有下列性质数的个数(包含输入的正整数 n n n)。
先输入一个正整数 n n n( n ≤ 1000 n \le 1000 n≤1000),然后对此正整数按照如下方法进行处理:
1. 不作任何处理;
2. 在它的左边拼接一个正整数,但该正整数不能超过原数,或者是上一个被拼接的数的一半;
3. 加上数后,继续按此规则进行处理,直到不能再加正整数为止。
输入格式
一行,一个正整数 n n n( n ≤ 1000 n \le 1000 n≤1000)。
输出格式
一个整数,表示具有该性质数的个数。
样例 1
样例输入 1
6
样例输出 1
6
提示
【样例解释】
满足条件的数为: 6 6 6, 16 16 16, 26 26 26, 126 126 126, 36 36 36, 136 136 136。
🤔一、思路:
(1)利用递推的思想,将符合条件的每一类所包含的数量,进行从小到大进行累加
递推:从初值出发反复进行某一运算得到所需结果。
😎二、源码:
#include <iostream>
using namespace std;
int f[1010];
int n;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) { //(1)
for (int j = 1; j <= i / 2; j++) {
f[i] += f[j];
}
f[i]++;
}
cout << f[n];
return 0;
}
😮三、代码分析:
(1)将每一类所包含的数量进行符合条件的除以一半进行累加,最后输出大答案
🤗 鸡汤来咯:
凡是新的事情在起头总是这样一来的,起初热心的人很多,而不久就冷淡下去,撒手不做了,因为他已经明白,不经过一番苦工是做不成的,而只有想做的人,才忍得过这番痛苦。