0
已解决
张睿杰
初级天翼
初级天翼
1508 矩阵检测
题目描述 Description
给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的0的数量都是偶数,则认为符合条件。 你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。 "改变矩阵元素"的操作定义为0变成1或者1变成0。
输入描述 Input Description
输入n + 1行,第1行为矩阵的大小n(0 < n < 10),以下n行为矩阵的每一行的元素,元素之间以一个空格分开。
输出描述 Output Description
如果矩阵符合条件,则输出"Ok!";
如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。
如果不符合以上两条,输出“Error!”。
样例输入 Sample Input
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1
样例输出 Sample Output
2 3
0
已采纳
陶梓锐
新手光能
新手光能
for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { cin>>a[i][j]; if (a[i][j]==0) { hang[i]++; lie[j]++; } } } for(int i=1; i<=n; i++) { if (hang[i]%2==1) { x1++; k1=i; } if (lie[i]%2==1) { x2++; k2=i; } }
核心代码,勿抄袭!!!
仅供参考!!!!
1
陆麟瑞
资深天翼
资深天翼
这题思路很简单,但写起来实现却很困难。
for(int i=1; i<=n; i++) { int s=0; for(int j=1; j<=n; j++) { if(a[i][j]==0) s++; } if(s%2!=0) if(x==0) x=i; else { cout<<"Error!"; } } for(int i=1; i<=n; i++) { int s=0; for(int j=1; j<=n; j++) if(a[j][i]==0) s++; if(s%2!=0) if(y==0) y=i; else { cout<<"Error!"; return 0; } } if(x==0&&y==0) { cout<<"Ok!"; return 0; } if(a[x][y]==0) a[x][y]=1; else a[x][y]=0; int s=0; for(int i=1; i<=n; i++) if(a[x][i]==0) s++; if(s%2!=0) { cout<<"Error!"; return 0; } s=0; for(int i=1; i<=n; i++) if(a[i][y]==0) s++; if(s%2!=0) { cout<<"Error!"; return 0; }
0
0
0
王子凡
高级光能
高级光能
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
cin>>a[i][j];
if (a[i][j]==0)
{
h[i]++;
l[j]++;
}
}
for (i=1;i<=n;i++)
if (h[i]%2!=0)
{
ch++;
hh=i;
}
for (j=1;j<=n;j++)
if (l[j]%2!=0)
{
cl++;
ll=j;
}
核心代码
最后判断输出:
if (ch==0 && cl==0)
cout<<"Ok!";
else if (ch==1 && cl==1)
cout<<hh<<' '<<ll;
else cout<<"Error!";