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!";
