题目链接

小红的矩阵

题目描述

给定一个 的矩阵,请你统计其中有多少个元素的个位数字是 9。

解题思路

本题是一个基础的矩阵遍历和计数问题。解决这个问题的核心在于两个步骤:一是如何遍历矩阵中的所有元素,二是如何判断一个整数的个位数是否为 9。

1. 遍历矩阵 我们可以使用两层嵌套的循环来访问矩阵中的每一个元素。外层循环负责遍历行(从第 1 行到第 行),内层循环负责遍历列(从第 1 列到第 列)。

2. 判断个位数 对于任意一个正整数 num,我们可以通过取模运算 num % 10 来得到它的个位数字。例如,39 % 10 的结果是 910 % 10 的结果是 0。 因此,判断一个数 num 的个位数是否为 9 的条件就是 num % 10 == 9

算法流程:

  • 初始化一个计数器 count 为 0。
  • 读取矩阵的行数 和列数
  • 通过 次循环(或两层嵌套循环)读取每一个矩阵元素。
  • 对读入的每一个元素 val,检查 val % 10 == 9 是否成立。
  • 如果成立,则将 count 加 1。
  • 遍历结束后,输出 count 的值。

代码

#include <bits/stdc++.h>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, m;
    cin >> n >> m;

    int count_of_nines = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            int val;
            cin >> val;
            if (val % 10 == 9) {
                count_of_nines++;
            }
        }
    }

    cout << count_of_nines << endl;

    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        int countOfNines = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                int val = sc.nextInt();
                if (val % 10 == 9) {
                    countOfNines++;
                }
            }
        }

        System.out.println(countOfNines);
    }
}
import sys

def solve():
    n, m = map(int, sys.stdin.readline().split())
    
    count_of_nines = 0
    for _ in range(n):
        row = list(map(int, sys.stdin.readline().split()))
        for val in row:
            if val % 10 == 9:
                count_of_nines += 1
                
    print(count_of_nines)

solve()

算法及复杂度

  • 算法:矩阵遍历 / 线性扫描
  • 时间复杂度:,其中 分别是矩阵的行数和列数。因为需要访问矩阵中的每一个元素一次。
  • 空间复杂度:,我们只需要常数级别的额外空间来存储计数器和当前读取的元素值。