OneCoder Avatar
OneCodercoderli.com · 963 篇博文
一级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【GESP】C++一级练习 luogu-B2078, 含 k 个 3 的数

📅 2024-11-30·✍️ OneCoder·计算中...·⏱️ 3 分钟
#GESP#C++#基础语句

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

CONSOLE 1 行
43833 3

样例输出 #1

CONSOLE 1 行
YES

题目分析

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

示例代码

C++ 25 行
#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,表示程序正常结束
}

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

读者讨论与留言

0 条讨论
✨ 支持点击留言直接回复 · Markdown 引用格式
💬 还没有读者留言,快来成为第一个讨论者吧!