布林矩陣的奇偶性
阿新 • • 發佈:2018-12-19
題目描述
一個布林方陣具有奇偶均勢特性,當且僅當 每行、每列總和為偶數,即包含偶數個1。如下面這個4*4的矩陣就具有奇偶均勢特性:
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1
編寫程式,讀入一個n階方陣並檢查它是否具有奇偶均勢特性。如果沒有,你的程式應當再檢查一下它是否可以通過修改一位(把0改為1,把1改為0)來使它具有奇偶均勢特性;如果不可能,這個矩陣就被認為是破壞了。
定義並呼叫如下函式:
int BalanceMatrix(int a[], int n);
函式返回1表示該矩陣具有奇偶均勢特性;函式返回2表示可以通過修改1位來達到奇偶均勢;函式返回-1表示該矩陣被是破壞了,無法恢復。
輸入
第一行是一個整數n ( 0< n < 100 ),代表該方陣的階數。然後輸入n 行,每行n個整數(0或1)。
輸出
如果矩陣是布林矩陣,輸出“OK”;如果能通過只修改該矩陣中的一位來使它成為布林矩陣,則輸出“Change bit(i,j)”,這裡i和j是被修改的元素的行與列(行,列號從0開始);否則,輸出“Corrupt”。
樣例輸入
4 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1
樣例輸出
OK
#include<stdio.h> int panduan(int b[101][101], int n); void xiugai(int c[101][101], int n); int main() { int i,j,n; int a[101][101]; scanf("%d",&n); for(i = 0; i < n; i ++) for(j = 0; j < n; j ++) scanf("%d",&a[i][j]); if(panduan(a,n)) printf("OK\n"); else xiugai(a,n); return 0; } int panduan(int b[101][101], int n) { int i,j,sum; for(i = 0; i < n; i ++) { sum = 0; for(j = 0; j < n; j ++) { sum += b[i][j]; } if(sum % 2 != 0) return 0; } for(j = 0; j < n; j ++) { sum = 0; for(i = 0; i < n; i ++) { sum += b[i][j]; } if(sum % 2 != 0) return 0; } return 1; } void xiugai(int c[101][101], int n) { int i,j,x,y,sum,p=0,q=0; for(i = 0; i < n; i ++) { sum = 0; for(j = 0; j < n; j ++) sum += c[i][j]; if(sum % 2 != 0) { x = i; p ++; } } for(j = 0; j < n; j ++) { sum = 0; for(i = 0; i < n; i ++) sum += c[i][j]; if(sum % 2 != 0) { y = j; q ++; } } if(p == 1 && q == 1) printf("Change bit(%d,%d)",x,y); else printf("Corrupt"); }