c++验证数独问题,求代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++验证数独问题,求代码相关的知识,希望对你有一定的参考价值。
定义一个数独类Sudoku,定义成员数据mySudoku将题目所给的9*9的数列输入到数独类中,并编写成员函数checkAnswer()验证它是否是一个成功的数独!
第一行是一个整数T,代表接下来有T组输入;
每一组输入有9行,每一行9个数字,数字都是1~9的合法正整数数字
对于每一组数据,如果这是一个成功的数独,输出“Yeah!”(不包含双引号)和一个换行符。
否则输出“Oh,No!”(不包含双引号)和一个换行符。
例如输入:
2
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
输出:
Yeah!
Oh,No!
不是类也可以,能够验证数独就行
#include<stdio.h>
#include<string.h>
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;
参考技术A #include <iostream>
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]<a[k])
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!"<<endl;
else cout<<"Oh,No!"<<endl;
return 0;
本回答被提问者采纳
以上是关于c++验证数独问题,求代码的主要内容,如果未能解决你的问题,请参考以下文章