> 技术文档 > 校招算法笔面试 | 校招笔面试真题-小红的矩阵_1_小红有一个2*2的印章

校招算法笔面试 | 校招笔面试真题-小红的矩阵_1_小红有一个2*2的印章


题目

题目链接

题目链接

小红的矩阵

题目描述

小红拿到了一个 n⋅m n \\cdot m nm 的矩阵,请你回答该矩阵中有多少个元素个位数是 9。

输入:

  • 第一行输入两个正整数 n n n m m m,代表矩阵的行数和列数
  • 接下来的 n n n 行,每行输入 m m m 个正整数,代表矩阵的元素

输出:

  • 输出一个整数,代表矩阵中个位数是 9 的元素数量

解题思路

这是一个简单的模拟问题,可以通过以下步骤解决:

  1. 关键发现:

    • 只需要判断每个数字的个位数
    • 个位数可以通过对10取余得到
    • 需要遍历矩阵的每个元素
  2. 解题策略:

    • 读入矩阵的每个元素
    • 判断每个元素对10取余是否为9
    • 统计满足条件的元素个数
  3. 具体步骤:

    • 读入矩阵大小 n 和 m
    • 遍历每个元素
    • 判断个位数是否为9
    • 累计计数

代码

#include using namespace std;int main() { int n, m; cin >> n >> m; int count = 0; for(int i = 0; i < n; i++) { for(int j = 0; j > x; if(x % 10 == 9) { count++; } } } cout << count << endl; return 0;}
import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int count = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { int x = sc.nextInt(); if(x % 10 == 9) {  count++; } } } System.out.println(count); }}
n, m = map(int, input().split())count = 0for i in range(n): row = list(map(int, input().split())) for x in row: if x % 10 == 9: count += 1print(count)

算法及复杂度

  • 算法:模拟
  • 时间复杂度: O ( n ⋅ m ) \\mathcal{O}(n \\cdot m) O(nm) - 需要遍历矩阵的每个元素
  • 空间复杂度: O ( 1 ) \\mathcal{O}(1) O(1) - 只需要常数空间存储变量

注意:

  1. 使用取余运算(%)可以方便地获取个位数
  2. 不需要存储整个矩阵,可以边读边处理
  3. 注意输入输出格式的处理