校招算法笔面试 | 校招笔面试真题-小红的矩阵_1_小红有一个2*2的印章
题目
题目链接
题目链接
小红的矩阵
题目描述
小红拿到了一个 n⋅m n \\cdot m n⋅m 的矩阵,请你回答该矩阵中有多少个元素的个位数是 9。
输入:
- 第一行输入两个正整数 n n n 和 m m m,代表矩阵的行数和列数
- 接下来的 n n n 行,每行输入 m m m 个正整数,代表矩阵的元素
输出:
- 输出一个整数,代表矩阵中个位数是 9 的元素数量
解题思路
这是一个简单的模拟问题,可以通过以下步骤解决:
-
关键发现:
- 只需要判断每个数字的个位数
- 个位数可以通过对10取余得到
- 需要遍历矩阵的每个元素
-
解题策略:
- 读入矩阵的每个元素
- 判断每个元素对10取余是否为9
- 统计满足条件的元素个数
-
具体步骤:
- 读入矩阵大小 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(n⋅m) - 需要遍历矩阵的每个元素
- 空间复杂度: O ( 1 ) \\mathcal{O}(1) O(1) - 只需要常数空间存储变量
注意:
- 使用取余运算(%)可以方便地获取个位数
- 不需要存储整个矩阵,可以边读边处理
- 注意输入输出格式的处理