[GESP202406 二级] 计数

[GESP202406 二级] 计数

GESP二级真题,多层循环和分支练习,难度★✮☆☆☆。

luogu-B4007 [GESP202406 二级] 计数

题目要求

题目描述

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

输入格式

第一行包含一个正整数 nn

第二行包含一个正整数 kk

输出格式

输出从 11nn 的所有正整数中, kk 出现的次数。

样例输入 #1

25
2

样例输出 #1

9

提示

112525 中,22 出现的正整数有 2,12,20,21,22,23,24,252,12,20,21,22,23,24,25 ,一共出现了 99 次。

对于全部数据,保证有 1n1000,1k91 \le n\le 1000,1 \le k\le 9


题目分析

解题思路

  1. 读取输入的整数 nnkk
  2. 初始化一个计数器,用于统计数字 kk 出现的次数。
  3. 遍历从 11nn 的所有整数。
  4. 对于每个整数,循环除以 1010直到该整数为 00
  5. 在每次循环中,通过余数取到每一位书,判断余数是否为 kk,如果是,则计数器加 11
  6. 遍历完毕后,输出计数器的值,即数字 kk 出现的次数。

{% include custom/custom-post-content-inner.html %}


示例代码

#include<iostream>
using namespace std;
int main(){
    int n, k, ans = 0; // 定义变量n、k和ans,ans初始化为0
    cin >> n >> k; // 从标准输入流中读取n和k的值
    for (int i = 1; i <= n; i++) { // 从1到n遍历每个整数
        int che = i; // 将当前整数赋值给che
        while (che != 0) { // 当che不为0时循环
            int z = che % 10; // 计算che除以10的余数,并赋值给z
            if (z == k) { // 如果z等于k
                ans++; // 将ans加1
            }
            che /= 10; // 将che除以10
        }
    }
    cout << ans; // 输出ans的值
    return 0; // 程序结束
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on