题目描述
一个布尔矩阵有一种奇偶性,即该矩阵所有行和所有列的和都是偶数。下面这4×4的矩阵就具有奇偶性:
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
它所有行的和是2,0,4,2。它所有列的和是2,2,2,2。
现请你编写一个程序,读入这个矩阵并检查它是否具有奇偶性。如果没有,你的程序应当再检查一下它是否可以通过修改一位(把0修改为1,把1修改为0)来使它具有奇偶性。如果不可能,这个矩阵就被认为是破坏了。
输入
输入包含多组测试数据。每组测试数据的第一行是一个整数n(1<=n<=100),代表该矩阵的大小。在接下来的行中,每行有n个整数。矩阵是由0或1构成的。n=0时,输入结束。
输出
对于每组输入,如果这个矩阵具有奇偶性,则输出“OK”。如果奇偶性能通过只修改该矩阵中的一位来建立,那么输出“Change bit (i,j)”,这里i和j是被修改的这位的行号和列号。否则,输出“Corrupt”。
样例输入
4 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 4 1 0 1 0 0 0 1 0 1 1 1 1 0 1 0 1 4 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0
样例输出
OK Change bit (2,3) Corrupt
代码:
import java.util.Scanner;
public class Matrix {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int sum = 0,sum1=0;
int s1=0,s2=0,x=0,y=0;
int n = in.nextInt();
int[][] arr = new int[n][n];
int[] arr1 = new int[n];
int[] arr2 = new int[n];
if (n>=1&&n<=100) {
for(int i=0;i<arr.length;i++) { //给二维数组赋值
for (int j = 0; j < arr.length; j++) {
arr[i][j] =in.nextInt();
sum=sum+arr[i][j]; //累加行的总和
}
arr1[i]=sum; //行总和的数组
sum = 0;
}
for(int i=0;i<arr.length;i++) {
for (int j = 0; j < arr.length; j++) {
sum1+=arr[j][i]; //累加列的总和
}
arr2[i]=sum1; //列的总和的数组
sum1 = 0;
}
for (int i = 0; i <arr1.length; i++) {
if (arr1[i]%2!=0) {
s1++;
x=i; //记录横坐标
}
if (arr2[i]%2!=0) { //是否加起来为奇数的
s2++;
y=i; //记录纵坐标
}
}
if(s1+s2==0) {
System.out.println("OK");
}else if(s1==1&&s2==1){
System.out.println("Change bit ("+(x+1)+","+(y+1)+")");
}else {
System.out.println("Corrupt");
}
}
}
}
提交题目时,错误了,怀疑是内存跟时间超了,大神们有什么解决方法吗,求带