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次出现的页码。
方法思路
-
初始化计数器:我们需要一个计数器来记录数字k出现的总次数。
-
遍历页码:从1开始逐个检查每个页码,分解页码的每一位数字,看是否等于k。
-
统计数字出现次数:对于每个页码,分解它的每一位数字,每遇到一个等于k的数字,就增加计数器。
-
检查终止条件:一旦计数器达到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;}}}}
}