文章目录
💥前言
☀️大家好☀️,我是烧蔬菜😁,最近做算法题可以感受到自己确实有点懈怠了😐,所以给自己定一个百日刷题计划,希望自己可以一直坚持下去💪,每天做题,也把题题解写下,记录自己每天的做题痕迹来激励提升自己获取正反馈✊,并且与大家分享下去😁
😉解题报告
💥一.[NOIP2002 普及组] 级数求和 biu~
☘️ 题目描述☘️
已知: S n = 1 + 1 2 + 1 3 + … + 1 n S_n= 1+\frac{1}{2}+\frac{1}{3}+…+\frac{1}{n} Sn=1+21+31+…+n1。显然对于任意一个整数 k k k,当 n n n 足够大的时候, S n > k \textcolor{#FF0000}{S_n>k} Sn>k。
现给出一个整数 k k k,要求计算出一个最小的 n n n,使得 S n > k \textcolor{#FF0000}{S_n>k} Sn>k。
输入格式
一个正整数 k \textcolor{#FF0000}{k} k。
输出格式
一个正整数 n \textcolor{#FF0000}{n} n。
🤔一、思路:
(1)当
S
n
>
k
S_n>k
Sn>k,输出当前
n
n
n的值,
(2)
S
n
S_n
Sn是以
n
n
n做为分母的累加值
(3)
k
k
k是从键盘输入的一个值
😎二、源码:
#include <iostream>
using namespace std;
int k;
int n = 0;
double s = 0;
int main() {
cin >> k;
while (k > s) { //(1)
n += 1; //(2)
s += 1.0 / n; //(3)
}
cout << n;
return 0;
}
😮三、代码分析:
(1)若
k
>
s
k>s
k>s进行循环;
(2)
n
n
n做为分母,每次循环累加一次;
(3)累加,整数除法运算结果,先去尾,再转换为浮点;
💥二.[NOIP2013 普及组] 计数问题biu~
☘️ 题目描述☘️
试计算在区间 1 1 1 到 n n n 的所有整数中,数字 x x x( 0 ≤ x ≤ 9 0\le x\le9 0≤x≤9)共出现了多少次?
例如,在 1 1 1 到 11 11 11 中,即在 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 1,2,3,4,5,6,7,8,9,10,11 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 1 1 出现了 4 4 4 次。
输入格式
2 2 2 个整数 n , x n,x n,x,之间用一个空格隔开。
输出格式
1 1 1 个整数,表示 x x x 出现的次数。
样例 1
样例输入 11 1
样例输出 4
🤔一、思路:
(1)计算 1 1 1到 n n n中所有数字明面上出现的 x x x的次数
😎二、源码:
#include <iostream>
using namespace std;
int n, x;
int ret = 0;
int digit;
int temp;
int main() {
cin >> n >> x;
for (int i = 1; i <= n; i++) { //(1)
temp = i;
while (temp % 10 || temp / 10) { //(2)
digit = temp % 10; //(3)
temp = temp / 10; //(4)
if (digit == x) { //(5)
ret++;
}
}
}
cout << ret << endl;
return 0;
}
😮三、代码分析:
(1)循环
1
1
1到
n
n
n次,并将当前数值临时保存;
(2)若
t
e
m
p
temp
temp取不到位数,而且
t
e
m
p
temp
temp没有可以消去的数位,结束循环;
(3)取最后一位位数
(4)消去最后一位位数
(5)若与
x
x
x相同,进行计数
🤗 鸡汤来咯:
时间就是速度,时间就是力量。