布尔矩阵
Posted jiamian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了布尔矩阵相关的知识,希望对你有一定的参考价值。
题目描述
一个布尔矩阵有一种奇偶性,即该矩阵所有行和所有列的和都是偶数。下面这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)来使它具有奇偶性。如果不可能,这个矩阵就被认为是破坏了。
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”。
样例输入
4 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 4 1 0 1 0 0 0 1 0 1 1 1 1 0 1 0 1 4 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0
样例输出
OK Change bit (2,3) Corrupt
挺简单的一道题
1 #include <stdio.h> 2 #include <algorithm> 3 using namespace std; 4 5 bool judge(int a[][101],int n) 6 7 int x=1,y=1; 8 for(int i=1;i<=n;i++) 9 10 int f=0,t=0; 11 for(int j=1;j<=n;j++) 12 13 f+=a[i][j]; 14 t+=a[j][i]; 15 16 if(f%2) 17 x=0; 18 if(t%2) 19 y=0; 20 21 if(x&&y) 22 return true; 23 else 24 return false; 25 26 27 void change(int a[][101],int n) 28 29 for(int i=1;i<=n;i++) 30 31 for(int j=1;j<=n;j++) 32 33 if(a[i][j]) 34 35 a[i][j]=0; 36 if(judge(a,n)) 37 38 printf("Change bit (%d,%d)\n",i,j); 39 return ; 40 41 else 42 43 a[i][j]=1; 44 continue; 45 46 47 else 48 49 a[i][j]=1; 50 if(judge(a,n)) 51 52 printf("Change bit (%d,%d)\n",i,j); 53 return ; 54 55 else 56 57 a[i][j]=0; 58 continue; 59 60 61 62 63 printf("Corrupt\n"); 64 return ; 65 66 67 int main() 68 69 int n; 70 while(scanf("%d",&n),n) 71 72 int a[101][101]; 73 for(int i=1;i<=n;i++) 74 75 for(int j=1;j<=n;j++) 76 77 scanf("%d",&a[i][j]); 78 79 80 if(judge(a,n)) 81 printf("OK\n"); 82 else 83 change(a,n); 84 85 return 0; 86
以上是关于布尔矩阵的主要内容,如果未能解决你的问题,请参考以下文章