含 k 个 3 的数

含 k 个 3 的数

GESP一级循环和基本运算练习,但是相比普通的题来说,略有难度,难度★✮☆☆☆。

luogu-B2078

题目要求

题目描述

输入两个正整数 mmkk,其中 1<m10151 \lt m \leq 10^{15}1<k151 \lt k \leq 15 ,判断 mm 是否恰好含有 kk33,如果满足条件,则输出 YES,否则,输出 NO

输入格式

输入一行,为两个整数 m,km,k,中间用单个空格间隔。

输出格式

满足条件,则输出 YES,否则,输出 NO

样例输入 #1

43833 3

样例输出 #1

YES

题目分析

  1. 首先,我们需要直接处理输入的正整数 mm,通过对 mm 进行取模和整除操作逐位检查每个数字。
  2. 在检查每个数字的同时,我们需要维护一个计数器,用于统计数字 3 的出现次数。
  3. 当我们遍历完所有数字后,比较计数器的值与输入的正整数 kk,如果相等则输出 YES,否则输出 NO

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

示例代码

#include <iostream> // 引入输入输出流库
using namespace std;

int main() {
    long long m, k; // 定义两个长整型变量 m 和 k
    cin >> m >> k; // 从标准输入读取两个正整数 m 和 k
    int ans = 0; // 初始化计数器 ans,用于统计数字 3 的个数

    while (true) { // 无限循环,直到手动中断
        if (m % 10 == 3) { // 检查当前最低位是否为 3
            ans++; // 如果是 3,计数器加 1
        }
        m /= 10; // 去掉最低位,继续检查下一位
        if (m == 0) { // 如果 m 变为 0,说明所有位数都已检查完
            break; // 退出循环
        }
    }

    if (ans == k) { // 检查计数器 ans 是否等于 k
        cout << "YES"; // 如果相等,输出 "YES"
    } else {
        cout << "NO"; // 否则,输出 "NO"
    }
    return 0; // 返回 0,表示程序正常结束
}

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

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

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

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

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