#1268九宫 为什么在本地运行没错,但是都是Wrong Answer呢

0
0
//hihocoder1268
#include<iostream>
using namespace std;
int a[3][3];
int zn;
int zn0;
void Initial();
void bushu();
void shuchu();
int ZeroNumber();
int main(){
    Initial();
    bushu();
    while(ZeroNumber()){
    bushu();        
    }
    shuchu();
    return 0;
}
void Initial(){
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            cin>>a[i][j];
        }
    }
    a[1][1]=5;
    zn0=0;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(a[i][j]==0){
            zn0++;  
            }
        }
    }
} 
int ZeroNumber(){
    zn=0;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(a[i][j]==0){
            zn++;   
            }
        }
    }
    if(zn<zn0){
        zn0=zn;
        return 1;
    }else{
        return 0;
    }
}
void bushu(){
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(0==a[i][j]){
                if(i==0&&j==0){
                    if(a[0][1]!=0&&a[0][2]!=0){
                        a[0][0]=15-a[0][1]-a[0][2];
                    }else if(a[2][2]!=0){
                        a[0][0]=10-a[2][2]; 
                    }else if(a[1][0]!=0&&a[2][0]!=0){
                        a[0][0]=15-a[1][0]-a[2][0];
                    }
                }
                if(i==0&&j==1){
                    if(a[0][0]!=0&&a[0][2]!=0){
                        a[0][1]=15-a[0][0]-a[0][2];
                    }else if(a[2][1]!=0){
                        a[0][1]=10-a[2][1]; 
                    }
                }
                if(i==0&&j==2){
                    if(a[0][0]!=0&&a[0][1]!=0){
                        a[0][2]=15-a[0][1]-a[0][0];
                    }else if(a[1][2]!=0&&a[2][2]!=0){
                        a[0][2]=15-a[1][2]-a[2][2]; 
                    }else if(a[2][0]!=0){
                        a[0][2]=10-a[2][0];
                    }
                }
                if(i==1&&j==0){
                    if(a[1][2]!=0){
                        a[1][0]=10-a[1][2];
                    }else if(a[0][0]!=0&&a[2][0]!=0){
                        a[1][0]=15-a[0][0]-a[2][0]; 
                    }
                }
                if(i==1&&j==2){
                    if(a[0][2]!=0&&a[2][2]!=0){
                        a[1][2]=15-a[0][2]-a[2][2];
                    }else if(a[1][0]!=0){
                        a[1][2]=10-a[1][0]; 
                    }
                }
                if(i==2&&j==0){
                    if(a[0][0]!=0&&a[1][0]!=0){
                        a[2][0]=15-a[0][0]-a[1][0];
                    }else if(a[0][2]!=0){
                        a[2][0]=10-a[0][2]; 
                    }else if(a[2][1]!=0&&a[2][2]!=0){
                        a[2][0]=15-a[2][1]-a[2][2];
                    }
                }
                if(i==2&&j==1){
                    if(a[0][1]!=0){
                        a[2][1]=10-a[0][1];
                    }else if(a[2][0]!=0&&a[2][2]!=0){
                        a[2][1]=15-a[2][0]-a[2][2]; 
                    }
                }
                if(i==2&&j==2){
                    if(a[0][0]!=0){
                        a[2][2]=10-a[0][0];
                    }else if(a[2][0]!=0&&a[2][1]!=0){
                        a[2][2]=15-a[2][0]-a[2][1]; 
                    }else if(a[0][2]!=0&&a[1][2]!=0){
                        a[2][2]=15-a[2][1]-a[2][0];
                    }
                }               
            }
        }
    }
}
void shuchu(){
    zn0=0;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(a[i][j]==0){
            zn0++;  
            }
        }
    }
    if(zn0!=0){
        cout<<"Too Many"<<endl;
    }else{
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                cout<<a[i][j]<<" ";
                if(i!=2&&j==2){
                    cout<<"\n";
                }
            }
        }
    }
}

1 answer(s)

0

你的算法是不断找直接能确定的数吧。但是没有直接能确定的数不代表就不是唯一解:

0 0 0
0 0 3
0 1 0

以上数据实际上是只有唯一解的。

  • 是这样的,没有考虑到十字架的情况,谢谢壮士!

  • 添加评论
  • reply

write answer 切换为英文 切换为中文


转发分享