#11908: 總算寫出來了, 紀錄一下


yatun (MiGo)

學校 : 不指定學校
編號 : 38080
來源 : [60.250.30.118]
最後登入時間 :
2021-12-29 17:19:55
a016. 數獨(SUDOKU) | From: [113.196.154.3] | 發表日期 : 2017-04-17 17:46

#include #define Rows 9 #define Columns 9 int CheckArray3_3(int CheckArray[Rows][Columns], int CheckStartRow, int CheckEndRow, int CheckStartColumn, int CheckEndColumn); int main(void) { int Array[Rows][Columns]; int RowIndex; int ColumnsIndex; int CheckSum; //Used to store sum from of every rows, columns and 3*3 array value. int CheckFlag; //If the final result CheckFlag == 1, meaning print "no", else print "yes". while (1) { CheckFlag = 0; //1. Store enter 9*9 array value. for (RowIndex = 0; RowIndex < Rows; RowIndex++) { CheckSum = 0; for (ColumnsIndex = 0; ColumnsIndex < Columns; ColumnsIndex++) { if (scanf("%d", &Array[RowIndex][ColumnsIndex]) == EOF) { return 0; } CheckSum += Array[RowIndex][ColumnsIndex]; } //2. Judgment the sum from every rows numbers whether equal to 45. Because 1+2+3+...+9 = 45. if (45 != CheckSum) { CheckFlag = 1; } //2.1 Judgement the sum from every 3*3 array whether equal to 45. if (2 == RowIndex || 5 == RowIndex || 8 == RowIndex) { if (CheckArray3_3(Array, RowIndex - 2, RowIndex, 0, 3) || CheckArray3_3(Array, RowIndex - 2, RowIndex, 3, 6) || CheckArray3_3(Array, RowIndex - 2, RowIndex, 6, 9)) { CheckFlag = 1; } } //2.2 Judgment the sum from every columns numbers whether equal to 45. if (8 == RowIndex) { for (ColumnsIndex = 0; ColumnsIndex < Columns; ColumnsIndex++) { CheckSum = 0; for (RowIndex = 0; RowIndex < Rows; RowIndex++) { CheckSum += Array[RowIndex][ColumnsIndex]; } if (45 != CheckSum) { CheckFlag = 1; } } } } if (1 == CheckFlag) { printf("no\n"); } else { printf("yes\n"); } } return 0; } /********************************************************************************** Function: Calculate the sum from every 3*3 array. **********************************************************************************/ int CheckArray3_3(int CheckArray[Rows][Columns], int CheckStartRow, int CheckEndRow, int CheckStartColumn, int CheckEndColumn) { int CheckArraySum = 0; int CheckStartColumnIndex = CheckStartColumn; for (; CheckStartRow <= CheckEndRow; CheckStartRow++) { for (CheckStartColumnIndex = CheckStartColumn; CheckStartColumnIndex < CheckEndColumn; CheckStartColumnIndex++) { CheckArraySum += CheckArray[CheckStartRow][CheckStartColumnIndex]; } } if (45 != CheckArraySum) { return 1; } return 0; }

 
#11909: Re:總算寫出來了, 紀錄一下


yatun (MiGo)

學校 : 不指定學校
編號 : 38080
來源 : [60.250.30.118]
最後登入時間 :
2021-12-29 17:19:55
a016. 數獨(SUDOKU) | From: [113.196.154.3] | 發表日期 : 2017-04-17 17:47

/**********************************************************************************
Problem: a016 "數獨(SUDOKU)"
Language: C (4,069 Bytes)                                                    
Result: AC(0ms, 84KB) judge by this@ZeroJudge                               
Author: yatun at 2017-04-17 17:15:08                                         
**********************************************************************************/
#include <stdio.h>

#define Rows          9  
#define Columns       9 

int CheckArray3_3(int CheckArray[Rows][Columns], int CheckStartRow, int CheckEndRow, int CheckStartColumn, int CheckEndColumn);

int main(void)
{
 int Array[Rows][Columns];
 
 int RowIndex;
 int ColumnsIndex;
 int CheckSum;    //Used to store sum from of every rows, columns and 3*3 array value.
 int CheckFlag;   //If the final result CheckFlag == 1, meaning print "no", else print "yes".
 
 while (1)
 {
  CheckFlag = 0;
  
  //1. Store enter 9*9 array value.
  for (RowIndex = 0; RowIndex < Rows; RowIndex++)
  {
   CheckSum = 0;
   
   for (ColumnsIndex = 0; ColumnsIndex < Columns; ColumnsIndex++)
   {
    if (scanf("%d", &Array[RowIndex][ColumnsIndex]) == EOF)
    {
     return 0;
    }   
    
    CheckSum += Array[RowIndex][ColumnsIndex];
   }

   //2. Judgment the sum from every rows numbers whether equal to 45. Because 1+2+3+...+9 = 45.
   if (45 != CheckSum)
   {
    CheckFlag = 1;
   }
      
   //2.1 Judgement the sum from every 3*3 array whether equal to 45.
   if (2 == RowIndex || 5 == RowIndex || 8 == RowIndex)
   {    
    if (CheckArray3_3(Array, RowIndex - 2, RowIndex, 0, 3) || CheckArray3_3(Array, RowIndex - 2, RowIndex, 3, 6) || CheckArray3_3(Array, RowIndex - 2, RowIndex, 6, 9))
    {
     CheckFlag = 1;
    }   
   }
   
   //2.2 Judgment the sum from every columns numbers whether equal to 45.
   if (8 == RowIndex)
   {
    for (ColumnsIndex = 0; ColumnsIndex < Columns; ColumnsIndex++)
    {
     CheckSum = 0;
     
     for (RowIndex = 0; RowIndex < Rows; RowIndex++)
     {
      CheckSum += Array[RowIndex][ColumnsIndex];
     }
   
     if (45 != CheckSum)
     {
      CheckFlag = 1;
     }
    }
   }
  }
  
  if (1 == CheckFlag)
  {
   printf("no\n");
  }
  else
  {
   printf("yes\n");
  }
 }
  
 return 0;
}

/**********************************************************************************
Function: Calculate the sum from every 3*3 array.
**********************************************************************************/
int CheckArray3_3(int CheckArray[Rows][Columns], int CheckStartRow, int CheckEndRow, int CheckStartColumn, int CheckEndColumn)
{
 int CheckArraySum = 0;
 int CheckStartColumnIndex = CheckStartColumn;

 for (; CheckStartRow <= CheckEndRow; CheckStartRow++)
 {
  for (CheckStartColumnIndex = CheckStartColumn; CheckStartColumnIndex < CheckEndColumn; CheckStartColumnIndex++)
  {
   CheckArraySum += CheckArray[CheckStartRow][CheckStartColumnIndex];
  }
 }
 
 if (45 != CheckArraySum)
 {
  return 1;
 }
 
 return 0;
}

 
ZeroJudge Forum