#include <iostream>
using namespace std;
bool lineCheck( int [] );
bool squareCheck( int [][9], int, int );
int main()
{
int i, j;
int number[ 9 ][ 9 ];
bool legal;
while( cin >> number[ 0 ][ 0 ] )
{
legal = true;
for( i = 0; i < 9; i++ )
for( j = 0; j < 9; j++ )
{
if( i == 0 && j == 0 )
continue;
cin >> number[ i ][ j ];
}
for( i = 0; i < 9; i++ )
if( !lineCheck( number[ i ] ) )
{
legal = false;
break;
}
if( legal == true )
for( i = 0; i < 9; i+=3 )
for( j = 0; j < 9; j+=3 )
if( !squareCheck( number, i, j ) )
{
legal = false;
break;
}
if( legal == true )
cout << "yes\n";
else
cout << "no\n";
}
return 0;
}
bool lineCheck( int number[ 9 ] )
{
int i;
bool unique[ 9 ] = { 0 };
for( i = 0; i < 9; i++ )
{
if( unique[ number[i] ] == true )
return false;
else
unique[ number[i] ] = true;
}
return true;
}
bool squareCheck( int number[][ 9 ], int rowStart, int columnStart )
{
int i, j;
bool unique[ 9 ] = { 0 };
for( i = rowStart; i < rowStart + 3; i++ )
for( j = columnStart; j < columnStart + 3; j++ )
{
if( unique[ number[i][j] ] == true )
return false;
else
unique[ number[i][j] ] = true;
}
return true;
}
WA(line:2)
我的答案:no
正確的答案 :yes
可是我用了許多數獨的答案去跑,跑出來都yes呀QQ
判斷的方式是每列去檢查有沒有重複,再去檢查每一方塊數字有沒有重複
照理說這樣檢查重複才會判斷為no QQ
請問是哪裡錯了?!?!?!
自己抓出來了,竟然被這種小錯誤整了一個小時 XD
把bool unique[ 9 ] 改 bool unique[ 10 ] 就OK了
沒注意到當數字為9的時候沒有unique[ 9 ]這東西阿 XD