直接考虑模拟,枚举每一个点作为2*2的子矩阵的左上角,然后判断是否是好矩阵即可。
Java
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] g = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                g[i][j] = scanner.nextInt();
            }
        }
        int ans = 0;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < m - 1; j++) {
                if (g[i][j] == g[i + 1][j] && g[i + 1][j] == g[i][j + 1] && g[i][j + 1] == g[i + 1][j + 1]) {
                    ans++;
                }
            }
        }
        System.out.println(ans);
        scanner.close();
    }
}
C++
#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    vector<vector<int>> g(n, vector<int>(m));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> g[i][j];
        }
    }
    int ans = 0;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < m - 1; j++) {
            if (g[i][j] == g[i + 1][j] && g[i + 1][j] == g[i][j + 1] && g[i][j + 1] == g[i + 1][j + 1]) {
                ans++;
            }
        }
    }
    cout << ans << endl;
    return 0;
}
Python
n, m = map(int, input().split())
g = [list(map(int, input().split())) for _ in range(n)]
ans = 0
for i in range(n - 1):
    for j in range(m - 1):
        if g[i][j] == g[i + 1][j] and g[i + 1][j] == g[i][j + 1] and g[i][j + 1] == g[i + 1][j + 1]:
            ans += 1
print(ans)
会员可通过查看《已通过》的提交记录来查看其他语言哦~
小美定义一个矩阵是”好矩阵”,当且仅当该矩阵所有元素都相同。 现在小美拿到了一个矩阵,她想知道该矩阵有多少2*2的子知阵是好矩阵?
第一行输入两个正整数n和77,代表如随的行数和列数。
接下来的n行,每行输入m个正整数a(i,j),代表小美拿到的矩阵。
1<=n,m<=100
1<=a(i,j)<=109
2*2好子知阵的数量
输入
3 3
1 2 1
1 1 1
1 1 3
输出
1
说明
只有左下角一个好子矩阵。