计数-洛谷B4007 [GESP202406 二级]

题目描述

小杨认为自己的幸运数是正整数 k(注:保证 1≤k≤9)。小杨想知道,对于从 1 到 n 的所有正整数中, k 出现了多少次。

输入格式

第一行包含一个正整数 n。

第二行包含一个正整数 k。

输出格式

输出从 1 到 n 的所有正整数中, k 出现的次数。

输入输出样例

说明/提示

从 1 到 25 中,2 出现的正整数有 2,12,20,21,22,23,24,25 ,一共出现了 9 次。

对于全部数据,保证有 1≤n≤1000,1≤k≤9。

解题思路

  1. 读取输入的整数 𝑛 和 𝑘。n表示数字范围的上限,k表示要统计的数字
  2. 初始化一个计数器,用于统计数字 𝑘 出现的次数。
  3. 外层循环遍历从 1 到 𝑛 的所有整数。
  4. 内层循环分解每个数字的各位数字,统计k出现的次数
  5. 在每次内循环中,通过余数(%10)取到当前最低位数字,并判断其是否为 𝑘,如果是,则计数器加 1。
  6. 使用t=t/10去掉已经处理的最低位,直到该整数为 0内循环结束。
  7. 外循环遍历完毕后,输出计数器的值,即数字 𝑘 出现的次数

代码实现

#include <iostream>
using namespace std;
int main(){
    int n,k,cnt=0;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        int t=i;//注意此处一定要有一个中间值t,不能直接对i进行操作,不然会影响外循环的执行
        while(t){
            if(t%10==k) cnt++;
            t=t/10;
        }
    }
    cout<<cnt;
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智码行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值