我在java中相对较新,我试图将二进制矩阵作为输入,其中行和列的总数将在2和1000之间。我正在使用BufferedInputStream,对于小矩阵,我的代码正在工作(给出正确的输出)例如 4x4 矩阵。但是对于 6x9 输入,它不起作用。实际上我正在尝试解决 12367 号 UVA 问题。
我的代码
import java.io.BufferedInputStream;
import java.util.Scanner;
class Main {
static int totalOne=0;
public static int swapCount(int array[]) {
int L = array.length, s=0;
for (int n=0;n<L;n++) {
int avg = totalOne / L;
if (array[n]>avg) {
int x=1;
while (array[n]>avg) {
int t = n+x;
int u = n-x;
if (t>L-1) {
if (array[t-L]<avg) {
array[n]--;
array[t-L]++;
s++;
}
}
else {
if (array[t]<avg) {
array[n]--;
array[t]++;
s++;
}
}
if (array[n]>avg) {
if (u<0) {
if (array[u+L]<avg) {
array[n]--;
array[u+L]++;
s++;
}
}
else {
if (array[u]<avg) {
array[n]--;
array[u]++;
s++;
}
}
}
}
x++;
}
}
return s;
}
public static void main(String args[]) {
Scanner stdin = new Scanner(new BufferedInputStream(System.in));
int t = stdin.nextInt();
int a,b,i=0,flag=0,swap=0;
String result = new String();
if (t<=10) {
while (i<t) {
i++;
totalOne = 0;
int R = stdin.nextInt();
int C = stdin.nextInt();
int [][] arr = new int [R][C];
int [] rowOne= new int [R];
int [] colOne= new int [C];
if (2<=R&&2<=C&&R<=1000&&C<=1000) {
for (a=0;a<R;a++) {
for (b=0;b<C;b++) {
arr[a][b]=stdin.nextInt();
if (arr[a][b]!=0 && arr[a][b]!=1)
flag=1;
if (arr[a][b]==1){
rowOne[a]++;
colOne[b]++;
}
}
}
if (flag==0) {
for (a=0;a<R;a++)
totalOne=totalOne+rowOne[a];
if (totalOne%R==0) {
result = "row";
swap = swapCount(rowOne);
if (totalOne%C==0) {
result = "both";
swap = swap + swapCount(colOne);
}
}
else {
if (totalOne%C==0) {
result = "column";
swap = swapCount(colOne);
}
else {
result = "impossible";
}
}
if (result.equals("impossible"))
System.out.println("Case "+i+": "+result);
else {
System.out.println("Case "+i+": "+result+" "+swap);
}
}
}
}
}
System.exit(0);
}
}
对于这样的输入:
1
4 4
0 0 0 0
1 1 1 1
0 0 0 0
1 1 1 1
(其中 1 是测试用例的数量,4 4 是矩阵维度,其余是矩阵元素)
输出是“Case 1: both 4”,这是预期的,但输入如下 -
1
6 9
1 0 1 0 1 1 1 0 1
0 0 0 1 0 1 0 0 1
1 1 0 1 0 0 0 0 1
0 0 0 0 1 0 0 1 0
1 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
它没有给出任何输出&在调试时我发现在读取所有矩阵元素之前,它是从主线程单步执行的,因此程序没有执行。
谁能告诉我问题出在哪里:(它与缓冲区大小有关吗?