top1编程
← 返回题目
题解

【入门】奇偶统计?

1 条题解

  • 0
    @ 2026-8-1 10:47:21

    解题思路

    这道题要我们在一个 n 行 m 列的表格(二维数组)里,数一数里面有多少个奇数、多少个偶数。

    先复习一下什么是奇数、偶数:

    • 偶数:能被 2 整除的数,比如 2、4、6、8。
    • 奇数:不能被 2 整除的数,比如 1、3、5、7。

    怎么判断一个数是奇数还是偶数呢?只要用这个数除以 2 看余数就行:

    • 如果 x % 2 == 0,说明 x 除以 2 正好除尽、余数是 0,那 x 就是偶数;
    • 如果 x % 2 != 0,说明 x 除以 2 余 1,那 x 就是奇数。

    这里的 % 是取余运算,算的是除法剩下的余数,比如 3 % 2 = 1,6 % 2 = 0。

    具体怎么做?表格有 n 行 m 列,我们就用双重循环:外层循环 i 控制行数,内层循环 j 控制列数,这样就能把表格里的每一个数都读一遍。每读到一个数,立刻判断它是奇数还是偶数,然后分别计数。

    拿题目样例来走一遍。输入:

    2 2
    2 3
    4 6
    

    表格是 2 行 2 列,一共 4 个数,我们一个一个看:

    • 第 1 个:2,2 % 2 == 0,是偶数,偶数个数变成 1;
    • 第 2 个:3,3 % 2 == 1,是奇数,奇数个数变成 1;
    • 第 3 个:4,4 % 2 == 0,是偶数,偶数个数变成 2;
    • 第 4 个:6,6 % 2 == 0,是偶数,偶数个数变成 3。

    数完啦!奇数 1 个、偶数 3 个,所以输出 "1 3",和题目样例完全一样。

    再举一个例子,如果输入:

    2 3
    1 2 3
    4 5 6
    

    一共 6 个数,1、3、5 是奇数(3 个),2、4、6 是偶数(3 个),输出就是 "3 3"。

    这里有一个很重要的小技巧:我们根本不用真的开一个二维数组把所有数都存下来。因为统计只需要知道"这个数是奇数还是偶数",读完一个、数完它、就可以直接扔掉,读一个处理一个就行。这样写既简单,又省内存。

    参考代码

    // P374 奇偶统计
    // 统计 n 行 m 列的二维数组中奇数和偶数各有多少个
    #include <iostream>
    using namespace std;
    
    int main() {
        int n, m;       // n 行 m 列
        int x;          // 临时存放读进来的每一个数
        int odd = 0;    // 奇数个数
        int even = 0;   // 偶数个数
        int i, j;       // 循环变量
    
        // 第一步:读入行数和列数
        cin >> n >> m;
    
        // 第二步:双重循环,把 n 行 m 列的每个数都读一遍
        for (i = 1; i <= n; i++) {
            for (j = 1; j <= m; j++) {
                cin >> x;             // 读入一个数
                if (x % 2 == 0) {     // 能被 2 整除就是偶数
                    even++;           // 偶数个数加 1
                } else {              // 否则就是奇数
                    odd++;            // 奇数个数加 1
                }
            }
        }
    
        // 第三步:输出结果,先是奇数个数,再是偶数个数
        cout << odd << " " << even << endl;
    
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(n × m)。双重循环一共要读 n × m 个数,每个数只处理一次。题目说 n、m 最大都是 100,最多 100 × 100 = 10000 个数,非常快。
    • 空间复杂度:O(1)。我们只用了 n、m、x、odd、even 这几个普通变量,没有开数组,占用的空间是固定不变的。
    • 1