#3525: 求救,一直WA,幫看看


rocmewtwo (ROCMew)


#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

 

請問是哪裡錯了?!?!?!

#3526: Re:求救,一直WA,幫看看


rocmewtwo (ROCMew)


自己抓出來了,竟然被這種小錯誤整了一個小時 XD

 

把bool unique[ 9 ] 改 bool unique[ 10 ] 就OK了

沒注意到當數字為9的時候沒有unique[ 9 ]這東西阿 XD