#12043: 雖然鳥鳥的, 應該是滿好理解的C++ AC解供參考


shawn2000100 (東華財金)

學校 : 國立東華大學
編號 : 57300
來源 : [27.53.168.5]
最後登入時間 :
2021-09-19 19:53:19
a016. 數獨(SUDOKU) | From: [134.208.255.201] | 發表日期 : 2017-05-19 14:38

#include<iostream>
using namespace std;
#define N 9

int main()
{
char input[N][N] = {0};
while ( cin >> input[0][0] >> input[0][1] >> input[0][2]
>> input[0][3] >> input[0][4] >> input[0][5]
>> input[0][6] >> input[0][7] >> input[0][8] ) {
for ( int i = 1; i < N; i++ )
for ( int j = 0; j < N; j++ ) {
cin >> input[i][j];
input[i][j] -= '0';
}
for ( int i = 0, j = 0; j < N; j++ )
input[i][j] -= '0';

bool result = true;

for ( int i = 0; i < N; i++ ) {
if ( !result ) break;
for ( int j = 0; j < N; j++ ) {
// 左右
for ( int m = 0; m < N; m++ ) {
if ( input[i][j] == ( input[i][m] ) && ( m != j ) ) {
result = false;
break;
}
}
// 上下
for ( int l = 0; l < N; l++ ) {
if ( input[i][j] == ( input[l][j] ) && ( l != i ) ) {
result = false;
break;
}
}
}
}
// 檢查九宮格
int sumShouldBe362880 = 1;
for ( int i = 0; i < 3; i++ )
for ( int j = 0; j < 3; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;

for ( int i = 0; i < 3; i++ )
for ( int j = 3; j < 6; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;

for ( int i = 0; i < 3; i++ )
for ( int j = 6; j < 9; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;
///////////////////////////////////////////////
for ( int i = 3; i < 6; i++ )
for ( int j = 0; j < 3; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;

for ( int i = 3; i < 6; i++ )
for ( int j = 3; j < 6; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;

for ( int i = 3; i < 6; i++ )
for ( int j = 6; j < 9; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;
//////////////////////////////////////////////////////
for ( int i = 6; i < 9; i++ )
for ( int j = 0; j < 3; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;

for ( int i = 6; i < 9; i++ )
for ( int j = 3; j < 6; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;

for ( int i = 6; i < 9; i++ )
for ( int j = 6; j < 9; j++ )
sumShouldBe362880 *= input[i][j];
if ( sumShouldBe362880 != 362880 )
result = false;
else
sumShouldBe362880 = 1;
//////////////////////////////////////////////////////
cout << ( ( result ) ? "yes" : "no" ) << endl;
}
return 0;
}

 
ZeroJudge Forum