把上述的数据存入文件,运行时从文件中读取:
#include
#include
int a[9][9];
int checkAnswer()
{int i,j,s,b[10],i1,j1;
for(i=0;i<9;i++)
{memset(b,0,sizeof(b));
for(j=0;j<9;j++)
b[a[i][j]]=1;
for(j=s=0;j<10;j++)
s+=b[j];
if(s-9)return 0;
}
for(i=0;i<9;i++)
{memset(b,0,sizeof(b));
for(j=0;j<9;j++)
b[a[j][i]]=1;
for(j=s=0;j<10;j++)
s+=b[j];
if(s-9)return 0;
}
for(i=0;i<9;i+=3)
for(j=0;j<9;j+=3)
{memset(b,0,sizeof(b));
for(i1=0;i1<3;i1++)
for(j1=0;j1<3;j1++)
b[a[i+i1][j+j1]]=1;
for(j1=s=0;j1<10;j1++)
s+=b[j1];
if(s-9)return 0;
}
return 1;
}
int main()
{int t,i,j;
FILE *fp;
if((fp=fopen("d:\\0.txt","r"))==NULL)
{printf("File open error!\n");
return 0;
}
fscanf(fp,"%d",&t);
while(t--)
{for(i=0;i<9;i++)
for(j=0;j<9;j++)
fscanf(fp,"%d",&a[i][j]);
printf("%s\n",checkAnswer()?"Yeah!":"Oh,No!");
}
fclose(fp);
return 0;
}
#include
using namespace std;
class Sudoku{
int num[9][9];
public:
Sudoku(){}
void in();
bool checkAnswer();
};
void Sudoku::in(){
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
cin>>num[i][j];
}
bool judge(int a[]){
int i,j,k,t;
for(i=0;i<8;i++){
k=i;
for(j=i+1;j<9;j++)
if (a[j] k=j;
if (i!=k){
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=0;i<9;i++)
if (a[i]!=i+1)
return true;
return false;
}
bool Sudoku::checkAnswer(){
int a[9];
int i,j,k;
for(i=0;i<9;i++){
for(j=0;j<9;j++)
a[j]=num[i][j];
if (judge(a)) return false;
for(j=0;j<9;j++)
a[j]=num[j][i];
if (judge(a)) return false;
if (i%3==0){
j=0;
for(k=0;k<3;k++){
a[j++]=num[i+k][0];
a[j++]=num[i+k][1];
a[j++]=num[i+k][2];
}
if (judge(a)) return false;
j=0;
for(k=0;k<3;k++){
a[j++]=num[i+k][3];
a[j++]=num[i+k][4];
a[j++]=num[i+k][5];
}
if (judge(a)) return false;
j=0;
for(k=0;k<3;k++){
a[j++]=num[i+k][6];
a[j++]=num[i+k][7];
a[j++]=num[i+k][8];
}
if (judge(a)) return false;
}
}
return true;
}
int main(){
int n;
Sudoku A;
cin>>n;
while (n--){
A.in();
if (A.checkAnswer())
cout<<"Yeah!"<else cout<<"Oh,No!"< }
return 0;
}