#161: 給定n*n由0和1組成的矩陣,如果矩陣的每一行和每一列的1的數量都是偶數,則認為符合條件。 你的任務就是檢測矩陣是否符合條件


試題描述

給定n*n由0和1組成的矩陣,如果矩陣的每一行和每一列的1的數量都是偶數,則認為符合條件。 你的任務就是檢測矩陣是否符合條件,或者在僅改變一個矩陣元素的情況下能否符合條件。 "改變矩陣元素"的操作定義為0變成1或者1變成0。

輸入格式

輸入n + 1行,第1行為矩陣的大小n(0 < n < 100),以下n行為矩陣的每一行的元素,元素之間以一個空格分開。

輸出格式

如果矩陣符合條件,則輸出OK;如果矩陣僅改變一個矩陣元素就能符合條件,則輸出需要改變的元素所在的行號和列號,以一個空格分開。如果不符合以上兩條,輸出Corrupt。

樣例輸入
樣例輸入1
4
1 0 1 0
0 0 0 0
1 1 1 1
0 1 0 1

樣例輸入2
4
1 0 1 0
0 0 1 0
1 1 1 1
0 1 0 1

樣例輸入3
4
1 0 1 0
0 1 1 0
1 1 1 1
0 1 0 1

樣例輸出
樣例輸出1
OK

樣例輸出2
2 3

樣例輸出3
Corrupt

其它說明

  

二維數組//做法;先把每一列每一行遍歷一次,同時記錄每一行每一列奇數行和列的個數,然后(重要的來了)如果奇數的(行和列)都==0,則輸出OK,如果行列都
==1則才輸出b[0]和c[0]的值,如果不滿足則輸出corrupt。因為題目要求的是只能修改一次!

  

#include<stdio.h>
#include<string.h>
int main()
{
   int a[101][101];
   int b[100],c[100];
   int n;
   int i,j,s1,s2;
   while(~scanf("%d",&n))
   {

     b[0]=0;
     c[0]=0;
       for(i=1,s1=0,s2=0;i<=n;i++)
       {
           for(j=1;j<=n;j++)
           {
               scanf("%d",&a[i][j]);
               if(a[i][j]==1)
               {
                   b[i]++;//記錄第i行的1的個數;
               }

           }
       }

       for(j=1;j<=n;j++)
       {
           for(i=1;i<=n;i++)
           {
               if(a[i][j]==1)
               {
                   c[j]++;//記錄第j列的1的個數;
               }
           }
       }

       for(i=1;i<=n;i++)
       {
           if(b[i]%2!=0)//判斷第i行的1的個數是否為奇數;
       {
          s1++;
          b[0]=i;//記錄有幾個奇數行;下面對於列的判斷同理;
       }
       if(c[i]%2!=0)
       {
           s2++;
           c[0]=i;
       }
       }
       if(s1==0&&s2==0)
        printf("OK\n");
       else if(s1==1&&s2==1)
       {
           printf("%d %d\n",b[0],c[0]);
       }
       else
        printf("Corrupt\n");

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

   }

   return 0;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM