B2061 整数的个数

一、题目理解

1.1 题目要求

从输入中读取 k 个整数,统计其中数字 1、5、10 分别出现了多少次,并按顺序输出这三个次数。

输入格式:

  • 第一行:一个正整数 k,表示接下来要读入的数字个数

  • 第二行:k 个整数,用空格隔开

输出格式:

  • 第一行:数字 1 出现的次数

  • 第二行:数字 5 出现的次数

  • 第三行:数字 10 出现的次数

1.2 样例模拟

假设输入为:第一行 8,第二行 1 5 10 1 5 1 3 10。

意思是:一共有 8 个数字,分别是 1、5、10、1、5、1、3、10。

我们逐一统计:

  • 数字 1 出现:第 1、4、6 个,共 3 次

  • 数字 5 出现:第 2、5 个,共 2 次

  • 数字 10 出现:第 3、8 个,共 2 次

  • 数字 3 出现:第 7 个,不是我们要统计的目标,忽略

因此输出为三行:第一行 3,第二行 2,第三行 2。

 

二、核心思想:计数器法

2.1 什么是计数器法?

想象有三个计分牌,分别标记为“1 号”、“5 号”、“10 号”。

  • 每读入一个数字,就看看它是几号。

  • 如果是 1 号,就给“1 号计分牌”加 1。

  • 如果是 5 号,就给“5 号计分牌”加 1。

  • 如果是 10 号,就给“10 号计分牌”加 1。

  • 如果是其他数字(比如 3、7、100),三块计分牌都不动。

全部数字读完后,三块计分牌上的数字就是我们要的答案。

2.2 为什么这种方法可行?

因为题目只关心 1、5、10 这三个特定数字出现的次数,其他数字一律忽略。所以只需要三个变量分别记录这三个数字的计数,每读入一个数就判断一次,符合条件就加一,不符合就跳过。

 

 

三、程序执行流程逐步解析

下面按照程序实际执行的顺序,逐步讲解每一步在做什么。所有代码片段在文末统一给出,这里只讲逻辑。

【第 1 步】程序开始

程序从主函数开始执行。首先需要准备变量:

  • 一个用来存放数字个数的变量,记为 k。

  • 三个计数器变量,分别记为 sum1、sum5、sum10,用来统计数字 1、5、10 出现的次数。

同时,为了让程序能进行输入输出操作,需要使用标准输入输出流。

【第 2 步】读入数字个数 k

从输入流中读取一个整数,存入 k。这个 k 表示接下来要读入多少个数字。

以假设的样例为例,此时 k = 8。

【第 3 步】初始化三个计数器

将 sum1、sum5、sum10 都初始化为 0。

为什么必须初始化为 0?

因为计数器是用来“累加”的。如果初始值不是 0(比如是随机值),那么统计结果就会出错。C++ 中局部变量不会自动初始化为 0,所以必须手动写等于 0。

【第 4 步】循环读入并统计

这是整个程序的核心部分。使用一个循环,循环变量 i 从 1 开始,每次加 1,直到 i 大于 k 时停止。因此循环体会执行 k 次,正好对应 k 个数字。

(1)读入一个数字

在循环体内定义一个临时变量 x,用来存放当前读入的数字。每次从输入流中读取下一个整数。

以假设的样例为例:

  • 第一次循环读入 1

  • 第二次循环读入 5

  • 第三次循环读入 10

  • 第四次循环读入 1

  • 第五次循环读入 5

  • 第六次循环读入 1

  • 第七次循环读入 3

  • 第八次循环读入 10

(2)判断并累加

对当前读入的数字 x 做三次独立的判断:

  • 判断 x 是否等于 1:如果等于,sum1 加 1。

  • 判断 x 是否等于 5:如果等于,sum5 加 1。

  • 判断 x 是否等于 10:如果等于,sum10 加 1。

注意: 这里用的是三个独立的 if 语句,而不是 if-else if-else 结构。因为一个数字只可能等于其中一个值(1、5、10 互不相同),所以用独立的 if 也没问题,逻辑清晰。如果题目要求统计的数字有重叠可能(比如“大于5”和“等于10”),就需要考虑用独立 if。

(3)循环结束后

循环结束后,sum1、sum5、sum10 就分别保存了三个数字出现的次数。

【第 5 步】输出结果

按题目要求的顺序输出:

  • 第一行输出 sum1

  • 第二行输出 sum5

  • 第三行输出 sum10

注意题目要求的输出格式:三个数字各占一行,顺序不能乱。

 

#include<bits/stdc++.h>              // 万能头文件
using namespace std;
int main() { 
    int k; 
    cin >> k;                         // 读入数字个数
    int sum1 = 0, sum5 = 0, sum10 = 0; // 三个计数器,分别统计 1、5、10 的出现次数,必须初始化为 0
    for(int i = 1; i <= k; i++){      // 循环 k 次
        int x;
        cin >> x;                     // 读入一个数字
        if(x == 1){                   // 如果当前数字是 1
            sum1++;                   // 1 的计数器加一
        }
        if(x == 5){                   // 如果当前数字是 5
            sum5++;                   // 5 的计数器加一
        }
        if(x == 10){                  // 如果当前数字是 10
            sum10++;                  // 10 的计数器加一
        }
    }
    cout << sum1 << endl << sum5 << endl << sum10;  // 按顺序输出三个计数器的值
    return 0;
}

 

posted @ 2026-09-17 15:19  乐意丘  阅读(6)  评论(0)    收藏  举报