2016年1月13日 星期三

a016: 數獨(SUDOKU)

內容 :
數獨是一種源自18世紀末的瑞士數學家歐拉(Leonhard Euler)所創造的拉丁方塊游戲。
在9格寬×9格高的大九宮格中有9個3格寬×3格高的小九宮格,已經有一些數字在裡面了(但並非一定採用數字,例如採用字母a,b,c...),根據這些數字,運用你的邏輯和推理,在其他的空格上填入1到9的數字,但是要注意了,每個數字在每個小九宮格內不能重複,每個數字在每行、每列也不能出現一樣的數字。 這種遊戲只需要邏輯思維能力,與數字運算無關。雖然玩法簡單,但數字排列方式卻千變萬化,所以不少教育者認為數獨是鍛鍊腦筋的好方法。 (wikipedia)
現在我們可以用程式來判斷一個九宮格數字是不是一個數獨的正解。
輸入說明 : 
輸入的每一組測試資料均為 9 × 9 的矩陣,且全部為 1~9 的數字,每兩組九宮格之間以一空行作為分隔
輸出說明 : 
yes or no
範例輸入 : help
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

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
範例輸出:
no
yes 
標籤:

import java.util.*;
public class a016 {      
public static void main(String[] args) {
 Scanner sc=new Scanner(System.in);
          int[][] Sudoku=new int[9][9];
          int i,j;
          while(sc.hasNext()){
        for(i=0;i<9;i++){
        for(j=0;j<9;j++){
        Sudoku[i][j]=sc.nextInt();
        }
        }
        boolean flag=true;
        int total=0;
           for(j=0;j<9;j++){
            total=0;
            for(i=0;i<9;i++){
        total+=Sudoku[i][j];
          }
            if(total!=45)
             flag=false;
           }
           for(i=0;i<9;i++){
            total=0;
            for(j=0;j<9;j++){
        total+=Sudoku[i][j];
          }
            if(total!=45)
             flag=false;
           }
           for(i=0;i<9;i+=3){
            for(j=0;j<9;j+=3){
            total=0;
        total+=Sudoku[i][j]+Sudoku[i][j+1]+Sudoku[i][j+2]
          +Sudoku[i+1][j]+Sudoku[i+1][j+1]+Sudoku[i+1][j+2]
          +Sudoku[i+2][j]+Sudoku[i+2][j+1]+Sudoku[i+2][j+2];
        if(total!=45)
                 flag=false;
          }
           }
           if(flag==true)
             System.out.println("yes");
           else
             System.out.println("no");      
        }
}
}

沒有留言:

張貼留言