10分求助
查看原帖
10分求助
753142
vratle楼主2022/9/24 13:05
#include <bits/stdc++.h>
using namespace std;

char c[105][105];
int n, ans;
int a[5], b[5];

bool inRange(int from, int to, int v[], int n) {
	for (int i = 1; i <= n; i++) {
		if (v[i] >= from && v[i] <= to) continue;
		return 0;
	}
	return 1;
}

void setIndex(int &x, int &y, int t) {
	if (t == 90) {
		x -= 1;
		y -= 1;
	} else if (t == 1) {
		x += 1;
		y += 1;
	} else if (t == 2) {
		x += 1;
		y -= 1;
	} else {
		x -= 1;
		y += 1;
	}
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> c[i][j];
		}
	}
	
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (c[i][j] == '1') {
				a[1] = a[2] = a[3] = a[4] = i;
				b[1] = b[2] = b[3] = b[4] = j;
				for (int i = 1; i <= 4; i++) setIndex(a[i], b[i], i-1);
				while (inRange(1, n, a, 4) && inRange(1, n, b, 4)) {
					if (c[a[1]][b[1]] == '0' || c[a[2]][b[2]] == '0'
					 || c[a[3]][b[3]] == '0' || c[a[4]][b[4]] == '0' ) break;
					ans++;
					for (int i = 1; i <= 4; i++) setIndex(a[i], b[i], i-1);
				}
			}
		}
	}
	
	for (int i = 1; i <= n - 1; i++) {
		for (int j = 1; j <= n - 1; j++) {
			if (c[i][j] == '1' && c[i+1][j] == '1' && c[i][j+1] == '1' && c[i+1][j+1] == '1') {
				a[1] = i;
				b[1] = j;
				a[2] = i+1;
				b[2] = j+1;
				a[3] = i+1;
				b[3] = j;
				a[4] = i;
				b[4] = i+1;
				while (inRange(1, n, a, 4) && inRange(1, n, b, 4)) {
					if (c[a[1]][b[1]] == '0' || c[a[2]][b[2]] == '0'
					 || c[a[3]][b[3]] == '0' || c[a[4]][b[4]] == '0') break;
					ans++;
					for (int i = 1; i <= 4; i++) setIndex(a[i], b[i], i-1);					 
				}
			}
		}
	}
	
	cout << ans;
}

各位大佬麻烦告诉以下我错哪里

2022/9/24 13:05
加载中...