布尔矩阵

来源:互联网 发布:java 比较文本相似度 编辑:程序博客网 时间:2024/04/30 22:32

题目描述

一个布尔矩阵有一种奇偶性,即该矩阵所有行和所有列的和都是偶数。下面这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”。

输入样例

41 0 1 00 0 0 01 1 1 10 1 0 141 0 1 00 0 1 01 1 1 10 1 0 141 0 1 00 1 1 01 1 1 10 1 0 10

输出样例

OKChange bit (2,3)Corrupt

提示


AC代码如下:

#include<iostream>#include<cmath>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int a[110][110];int main(){    int n,i,j;    while(scanf("%d",&n)!=EOF)    {        if(n==0)            break;        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)               cin>>a[i][j];               int flag=0,flag2=0;               int sum;               int r,l;        for(i=1;i<=n;i++)        {             sum=0;            for(j=1;j<=n;j++)            {                sum+=a[i][j];            }            if(sum%2==0)                flag++;            else            {                flag2++;                 r=i;               //标记要改的行;            }        }        if(flag2>1)        {            printf("Corrupt\n");   //在这个矩阵中若有超过一行的奇数,那么就无法改变;            continue;        }        flag2=0;        for(j=1;j<=n;j++)        {            sum=0;            for(i=1;i<=n;i++)            {               sum+=a[i][j];            }            if(sum%2==0)                flag++;            else            {                flag2++;                 l=j;         //标记要改的列;            }        }        if(flag2>1)        {            printf("Corrupt\n");  //在这个矩阵中若有超过一列的奇数,那么也将无法改变;            continue;        }        if(flag==2*n)        {            printf("OK\n");            continue;        }        printf("Change bit (%d,%d)\n",r,l);    }    return 0;}