題目連結:a016: 數獨(SUDOKU)
JAVA 程式碼
//作者:骷骷
//網誌:http://bekachu.pixnet.net/blog
import java.util.Scanner;
public class JAVA {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int[][] sudoku=new int[9][9];
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
sudoku[i][j]=sc.nextInt();
}
}
boolean t=true;
L1:
for(int i=0;i<9;i++){
//檢查 列 是否重複
//row:i column:j
for(int j=1;j<9;j++){
for(int k=j-1;k>=0;k--){
if(sudoku[i][j]==sudoku[i][k]){
t=false;
break L1;
}
}
}
//檢查 欄 是否重複
//column:i row:j
for(int j=1;j<9;j++){
for(int k=j-1;k>=0;k--){
if(sudoku[j][i]==sudoku[k][i]){
t=false;
break L1;
}
}
}
//檢查每個小九宮格是否重複
//
//i:036
// 147
// 258
//i 跑大九宮格 ( 1 個大九宮格有 81個值 )
//
//j:012
// 345
// 678
//j 跑小九宮格 ( 1 個小九宮格有 9 個值 )
for(int j=1;j<9;j++){
for(int k=j-1;k>=0;k--){
if(sudoku[i%3*3+j/3][j%3+i/3*3]==sudoku[i%3*3+k/3][k%3+i/3*3]){
t=false;
break L1;
}
}
}
}
if(t){
System.out.println("yes");
}else{
System.out.println("no");
}
}
sc.close();
}
}
/*測試資料:
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7 8
no
1 9 3 2 6 5 4 7 8
7 8 2 3 1 4 9 5 6
4 5 6 9 7 8 1 3 2
2 3 4 8 5 1 6 9 7
9 6 5 4 3 7 2 8 1
8 7 1 6 9 2 3 4 5
3 1 9 5 8 6 7 2 4
5 2 7 1 4 3 8 6 9
6 4 8 7 2 9 5 1 3
yes
*/
==========
本來是在找 JAVA 有沒有 goto 的語法,
後來找到可以為迴圈命名,再 break 或 continue 迴圈名稱的用法,
感覺比 goto 語法高級的樣子。
判斷每個小九宮格是否重複的地方有點複雜,
最後還是被骷骷找到規律,破解掉啦。
文章標籤
全站熱搜
