2013J_1:计数问题

洛谷:P1980
OJ: P4941

这段代码的核心思想是逐个数字检查从1到a中的每个数,看看x在其中出现了多少次。对每个数字,它通过不断取模(%10)和整除(/10)操作来检查每一位是否等于x。如果是,就增加计数器c的值。这种方法能准确计算出x在指定区间内出现的次数。

代码实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**************************************************************** 
 * Description: 2013年普及组第一题:计数问题
 * Author: Alex Li
 * Date: 2022-10-05 21:05:32
 * LastEditTime: 2024-01-22 15:02:27
****************************************************************/

#include <iostream>
using namespace std;

int main(){
    int a, x, c = 0, d, e;
    cin >> a >> x; // 读入两个整数,a表示区间的上限,x表示要计数的数字

    for (int i = 1; i <= a; i++){ // 遍历从1到a的每个整数
        e = i; // 将当前数字i赋值给e,用于分解这个数字的各个位
        for (int j = 1; j <= 7; j++){ // 假设数字最多有7位,逐位检查
            d = e % 10; // 取出数字的最后一位
            if(d == x) c++; // 如果这一位等于x,则计数器c加1
            e = e / 10; // 移除已经检查过的最后一位
            if(e == 0) break; // 如果没有更多的位可以检查,跳出循环
        }
    }
    cout << c; // 输出数字x出现的总次数
    return 0;
}
Scroll to Top