1026: 부울 행렬

14190 단어 행렬
제목 설명
하나의 브리 행렬은 하나의 짝수성을 가지고 있는데, 즉, 이 행렬의 모든 줄과 모든 열의 합은 짝수이다.아래×4의 행렬은 패리티를 갖습니다. 1 0 1 0 0 0 0 1 1 1 1 0 1 1 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
코드가 여전히 문제가 있어서 알아낼 수 없다
 1 #include <stdio.h>

 2 int main(void)

 3 {

 4     //freopen("in.txt","r",stdin);

 5     int num[101][101]={0};

 6     int i,j,n;

 7     int ia,ja;

 8     int count1,count2;

 9     count1=count2=0;

10     

11     scanf("%d",&n);

12     while(n)

13     {

14     

15     for(i=0;i<n;i++)

16     {

17         for(j=0;j<n;j++)

18             {

19                 scanf("%d",&num[i][j]);

20                 num[i][n]+=num[i][j];

21             }

22     }

23     for(j=0;j<n;j++)

24     {

25         for(i=0;i<n;i++)

26         {

27             num[n][j]+=num[i][j];

28         }

29     }

30     for(i=0;i<n;i++)

31     {

32         if((num[i][n]%2)!=0)

33         {

34             ia=i;

35             count1++;

36         }

37         if((num[n][i]%2)!=0)

38         {

39             ja=i;

40             count2++;

41         }

42     }

43     if(count1==0&&count2==0)

44         puts("OK");

45     else if(count1==1&&count2==1)

46         {

47             printf("Change bit (%d,%d)
",ia+1,ja+1); 48 } 49 else 50 puts("Corrupt"); 51 scanf("%d",&n); 52 } 53 return 0; 54 55 }

공식 코드
 1 #include<stdio.h>

 2 #include<string.h>

 3 

 4 int main()

 5 {

 6         //freopen("in.txt","r",stdin);

 7         int n,m[100][100],r[100],c[100],i,j,x,y,R,C;

 8         while(scanf("%d",&n)!=EOF,n)

 9         {

10                 memset(r,0,sizeof(r));

11                 memset(c,0,sizeof(c));

12                 for(i=0;i<n;i++)

13                         for(j=0;j<n;j++)

14                         {

15                                 scanf("%d",&m[i][j]);

16                                 r[i]+=m[i][j];

17                                 c[j]+=m[i][j];

18                         }

19                 for(R=C=i=0;i<n;i++)

20                 {

21                         if(r[i]%2)

22                         {

23                                 R++;

24                                 x=i+1;

25                         }

26                         if(c[i]%2)

27                         {

28                                 C++;

29                                 y=i+1;

30                         }

31                 }

32                 if(!R&&!C)

33                         puts("OK");

34                 else if(R==1&&C==1)

35                         printf("Change bit (%d,%d)
",x,y); 36 else 37 puts("Corrupt"); 38 } 39 return 0; 40 }

좋은 웹페이지 즐겨찾기