#include <iostream>
#include <cmath>
#include <string>
using namespace::std;
//int set(int*);
int main() {
int a[81],ch=0;//,b,c[9],ch=0;
while(cin){
for (int i=0;i<81;i++){
cin >> a[i];
}
//set(c);
//橫排檢查
for (int x=0;x<=8;x++){
for (int i=0;i<=8;i++){
for (int j=8;j>i;j--){
if (a[i+9*x] == a[j+9*x]){
ch ++;
break;
}
}
}
}
//直排檢查
for (int x=0;x<=8;x++){
for (int i=0;i<=8;i++){
for (int j=8;j>i;j--){
if (a[i*9+x] == a[j*9+x]){
ch ++;
break;
}
}
}
}
//各框檢查
for (int m=0;m<3;m++){
for (int k=0;k<3;k++){
for (int i=0;i<3;i++){
for (int j=0;j<2;j++){
int x = (i+j*9+k*3+27*m);
// i 同行
if (i == 0){
if (j == 0)//左上
if (a[x]==a[x+10]||a[x]==a[x+11]||
a[x]==a[x+19]||a[x]==a[x+20]){
ch ++;
break;
}
if (j == 1)//左中
if (a[x]==a[x+10]||a[x]==a[x+11]){
ch ++;
break;
}
}
else if (i == 1){
if (j == 0)//中上
if (a[x]==a[x+8]||a[x]==a[x+10]||
a[x]==a[x+17]||a[x]==a[x+19]){
ch ++;
break;
}
if (j == 1)//中
if (a[x]==a[x+8]||a[x]==a[x+10]){
ch ++;
break;
}
}
else if (i == 2){
if (j == 0)//右上
if (a[x]==a[x+7]||a[x]==a[x+8]||
a[x]==a[x+16]||a[x]==a[x+17]){
ch ++;
break;
}
if (j == 1)//右中
if (a[x]==a[x+8]||a[x]==a[x+7]){
ch ++;
break;
}
}
}
}
}
}
if (ch > 1){cout<<"no"<<endl;}
else {cout << "yes"<<endl;}
}
return 0;
}
WA (line:2)
答案不正確
您的答案為: no 正確答案為: yes
哭哭 求救
我後來想得很簡單
他說只要是對的就可以
也就是說每條橫的 每條直的 每個九宮格 只要不要重複就可以
所以只要有三個bool就好了
bool row[10][10]; 第0~8列
bool line[10][10]; 第0~8行
bool box[10][10]; 第0~8個九宮格 (可以用i+j/3)