读入矩阵后,遍历矩阵,对每个2∗2的矩阵统计0和1的个数,如果相等,则答案加一。
可以直接将四个格子的值加起来,如果相等,那么和为2。
C++
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,cnt,ans=0;
char a[105][105];
int main(){
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;++i){
		scanf("%s",a[i]+1);
	}
	for(int i=1;i<n;++i){
		for(int j=1;j<m;++j){
			cnt = a[i][j]-'0' + a[i+1][j]-'0' + a[i][j+1]-'0' + a[i+1][j+1]-'0';
			if(cnt==2){
				ans++;
			}
		}
	}
	printf("%d",ans);
	
	return 0;
}
import java.util.*;
// 注意类名必须为Main
class Main {
    static int n,m;
    static char[][] a;
    public static int aaa(){
        int res = 0;
        for(int i=1;i<n;i++){
            // String s = sc.next();
            for(int j=1;j<m;j++){
                int n0 = 0;
                int n1 = 0;
                if(a[i][j] == '1'){
                    n1++;
                }else{
                    n0++;
                }
                if(a[i-1][j] == '1'){
                    n1++;
                }else{
                    n0++;
                }
                if(a[i][j-1] == '1'){
                    n1++;
                }else{
                    n0++;
                }
                if(a[i-1][j-1] == '1'){
                    n1++;
                }else{
                    n0++;
                }
                if(n0 == n1){
                    res++;
                }
            }
        }
        return res;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        a = new char[n][m];
        for(int i=0;i<n;i++){
            String s = sc.next();
            for(int j=0;j<m;j++){
                a[i][j] = s.charAt(j);
            }
        }
        System.out.println(aaa());
        
    }
}
n, m = map(int, input().split())
matrix = []
for _ in range(n):
    matrix.append(input())
prefixSum = [[0] * (m + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
    for j in range(1, m + 1):
        prefixSum[i][j] = (1 if matrix[i-1][j-1] == '1' else 0) + prefixSum[i-1][j] + prefixSum[i][j-1] - prefixSum[i-1][j-1]
res = 0
for i in range(2, n+1):
    for j in range(2, m+1):
        if prefixSum[i][j] - prefixSum[i-2][j] - prefixSum[i][j-2] + prefixSum[i-2][j-2] == 2:
            res += 1
print(res)
        小美拿到了一个n行m列的矩阵,他想知道该矩阵有多少个2∗2的子矩形满足1和0数量相等。
第一行为n和m
接下来n行,每行为长度为m的01串,用来表示矩阵
2≤n,m≤100
一个整数,表示答案
输入
2 3
110
010
输出
1