a016

輸入說明 :

輸入的每一組測試資料均為 9 × 9 的矩陣,且全部為 1~9 的數字,每兩組九宮格之間以一空行作為分隔

輸出說明 :

yes or no

這題是先把陣列讀進來,然後檢查每一行跟每一列還有每一個3*3的區塊加起來有沒有45,區塊那邊還是雙層for迴圈 來加總,但是每次要跳三。

#include<stdio.h>
int  CheckRow(int [9][9]);
int  CheckColumn(int [9][9]);
int  CheckBlock(int [9][9]);

int main()
{
   int array[9][9];
   int i,j;

   while(scanf("%d",&array[0][0])!=EOF)
   {
     for(i=1;i<9;i++)
     {
      scanf("%d",&array[0][i]);
     }

     for(i=1;i<9;i++)
     {
       for(j=0;j<9;j++)
         scanf("%d",&array[i][j]);  
     }



    if(CheckRow(array)==1)
       printf("no\n");
    else if(CheckColumn(array)==1)
       printf("no\n");
    else if(CheckBlock(array)==1)      
       printf("no\n");
    else
       printf("yes\n");

   }
return 0;
}




CheckRow(int array[9][9])
{   
    int flag=0;
    int i,j;
    int sum;
    for(i=0;i<9;i++)
    {    
      sum=0;

      for(j=0;j<9;j++)
          {
            sum+=array[i][j];
        }

      if(sum!=45)
          {
          flag=1;
          break;
        }
    }
    return flag;
}

CheckColumn(int array[9][9])
{   
    int flag=0;
    int i,j;
    int sum;
    for(j=0;j<9;j++)
    {    
      sum=0;

      for(i=0;i<9;i++)
          {
            sum+=array[i][j];
        }

      if(sum!=45)
          {
          flag=1;
          break;
        }
    }
    return flag;
}

CheckBlock(int array[9][9])
{ 
    int flag=0;
    int i,j;
    int m,n;
    int sum;
    for(i=0;i<9;i+=3)
      for(j=0;j<9;j+=3)
      { 
        sum=0;
          for(m=0;m<3;m++)
            for(n=0;n<3;n++)
             sum+=array[m+i][n+j];

            if(sum!=45)
            flag=1;           
      }

    return flag;
}