问题标题: 酷町堂:1508 矩阵检测

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

 

我要回答