题目描述
小杨认为自己的幸运数是正整数 k(注:保证 1≤k≤9)。小杨想知道,对于从 1 到 n 的所有正整数中, k 出现了多少次。
输入格式
第一行包含一个正整数 n。
第二行包含一个正整数 k。
输出格式
输出从 1 到 n 的所有正整数中, k 出现的次数。
输入输出样例
输入 #1
25
2
输出 #1
9
说明/提示
从 1 到 25 中,2 出现的正整数有 2,12,20,21,22,23,24,25 ,一共出现了 9 次。
对于全部数据,保证有 1≤n≤1000,1≤k≤9。
解题思路:
要解决这个问题,基本的思路就是遍历从 1 到 n 的所有正整数,对于每个整数,将其转化为字符串或逐位提取数字,检查其中是否包含给定的数字 k,然后统计其出现的次数。
-
输入处理:
- 输入的第一行是一个整数
n
,表示我们要处理的正整数范围是从 1 到 n。 - 输入的第二行是一个整数
k
,表示我们要统计的幸运数字。
- 输入的第一行是一个整数
-
遍历数字范围:
- 从 1 到 n,我们需要逐个检查每个数字中是否包含数字
k
。 - 对于每个数字,可以将其转化为字符串来方便检查,或者直接逐位提取数字来判断。
- 从 1 到 n,我们需要逐个检查每个数字中是否包含数字
-
统计出现次数:
- 对于每个数字,检查它是否包含数字
k
。如果包含,则将出现的次数加 1。 - 注意:不是检查该数字是否等于
k
,而是检查该数字中是否有k
这个数字出现。
- 对于每个数字,检查它是否包含数字
-
输出结果:
- 最后,输出统计的总次数。
具体步骤:
- 遍历从 1 到 n 的所有整数。
- 对于每个整数,将其转化为字符串或逐位检查数字是否包含
k
。 - 统计每次包含
k
的情况,并最终输出统计值。
代码实现:
#include<bits/stdc++.h>
using namespace std;
int k; // 存储指定的数字k
int main(){
int n;
cin >> n >> k; // 输入n和k,n是数字的范围,k是要查找的数字
int s = 0; // 用来记录包含数字k的数字的个数
// 遍历从1到n的每个数字
for(int i = 1; i <= n; i++){
int t = i; // 将i赋值给t,用来在后续的循环中修改
while(t){ // 当t不为0时,继续检查每一位
if(t % 10 == k){ // 如果当前最低位等于k
s++; // 计数器s增加,表示找到了一个包含k的数字
break; // 一旦找到k,就跳出内层循环,检查下一个数字
}
t /= 10; // 去掉最低位,继续检查剩余部分
}
}
cout << s; // 输出包含数字k的数字的总个数
return 0; // 程序结束
}