http://acm.sjtu.edu.cn/OnlineJudge/problem/1005
C++程序编写
#include <iostream>
#include <algorithm>
using namespace std;
bool isunique(int a[])
{
bool flag = true;
sort(a, a + 9);
for (int i = 0; i < 9; i++)
if (a[i] != i + 1)
{
flag = false;
break;
}
return flag;
}
string issudoku()
{
string si;
int su[9][9], s[9];
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
cin >> su[i][j];
bool flag = true;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
s[j] = su[i][j];
if (!isunique(s))
{
flag = false;
break;
}
}
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
s[j] = su[j][i];
if (!isunique(s))
{
flag = false;
break;
}
}
for (int i = 0; i < 9; i += 3)
for (int j = 0; j < 9; j += 3)
{
for (int m = 0; m < 3; m++)
for (int n = 0; n < 3; n++)
s[3 * m + n] = su[i + m][j + n];
if (!isunique(s))
{
flag = false;
break;
}
}
if (flag)
si = "Right";
else
si = "Wrong";
return si;
}
int main()
{
int n;
cin >> n;
string s[20];
for (int i = 0; i < n; i++)
s[i] = issudoku();
for (int i = 0; i < n; i++)
cout << s[i] << endl;
return 0;
}
isunique函数用来判断s[0]到s[8]是否是1-9的数字,
issudoku函数用来判断s[9][9]是否是数独,
最后main函数调用子函数并输出判断结果。