2978: 临时测试-页码

题目描述

在输的页码中找到某个数字是第一次出现。比如数字1,分别在页码:1、10,11,12中出现。那么数字1第五次出现在12页;第3和4次出现在第11页。

输入

一行两个整数k和n。代表要找的数字和出现的次数。

输出

一行,数字出现的页码

样例输入

复制

1 5
样例输出

复制

12

要解决这个问题,我们需要找到在连续页码中数字k第n次出现的页码。例如,数字1在页码1、10、11、12等中出现,第5次出现是在页码12。我们需要编写一个程序,能够高效地遍历页码,并统计数字k出现的次数,直到找到第n次出现的页码。

方法思路

  1. 初始化计数器:我们需要一个计数器来记录数字k出现的总次数。

  2. 遍历页码:从1开始逐个检查每个页码,分解页码的每一位数字,看是否等于k。

  3. 统计数字出现次数:对于每个页码,分解它的每一位数字,每遇到一个等于k的数字,就增加计数器。

  4. 检查终止条件:一旦计数器达到n,立即返回当前页码。

这种方法的关键在于如何高效地分解每个页码的数字并统计k的出现次数。对于每个页码,我们可以通过不断取模和除以10来分解每一位数字。

解决代码

#include <iostream>
using namespace std;

int main() {
    int k, n, count = 0;
    cin >> k >> n;
    for (int page = 1; ; ++page) {
        for (int num = page; num > 0; num /= 10) {
            if (num % 10 == k) {
                if (++count == n) {
                    cout << page << endl;
                    return 0;
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值