#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; }
/**********************************************************************************
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;
}