題目連結: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 語法高級的樣子。
判斷每個小九宮格是否重複的地方有點複雜,
最後還是被骷骷找到規律,破解掉啦。
文章標籤
全站熱搜
留言列表