題目
數獨是一類廣受大衆喜歡的填數遊戲。最典型的數獨由9*9的方格組成,其中會填入一些1~ 9的數字。玩家需要補上剩餘格子的數字,使得每個格子所在的行、列、小九宮格都包含有1~9的數字,不重不漏。
現在小明已經做好了一些填好了所有數字的數獨遊戲題面,正準備挖空。但在此之前,他希望你幫忙檢查一下題面是否正确,即做好的題面是否每個格子都滿足所在行、列、小九宮格都包含1~9。
題解
package main
import (
"fmt"
)
func main() {
//輸入
var T int
fmt.Scan(&T)
if T < 1 || T > 5 {
fmt.Println("T 超出範圍")
return
}
flag := true
var result [5] bool
for i := 0; i < T; i++ {
//輸入數組
var c [9][9] int
for i := 0; i < 9; i++ {
for j := 0; j < 9 ; j++ {
var num int
fmt.Scan(&num)
c[i][j] = num
}
}
for n := 0; n < 9 ; n++ {
//比較行
if isRepetition(c[n]) {
flag = false
break
}
//比較列
var col [9] int
for k := 0; k < 9 ;k++ {
col[k] = c[k][n]
}
if isRepetition(col){
flag = false
break
}
}
if flag {
//九宮格
var nine [9] int
for n := 0 ; n < 7; n++{
for k := 0 ; k < 7; k++{
nine[0] = c[n][k]
nine[1] = c[n+1][k]
nine[2] = c[n][k+1]
nine[3] = c[n+2][k]
nine[4] = c[n][k+2]
nine[5] = c[n+2][k+1]
nine[6] = c[n+1][k+2]
nine[7] = c[n+1][k+1]
nine[8] = c[n+2][k+2]
}
}
if isRepetition(nine) {
result[i] = false
}else {
result[i] = true
}
}else {
result[i] = false
}
}
for i := 0; i < T ; i++{
if result[i] {
fmt.Println("YES")
}else {
fmt.Println("NO")
}
}
}
//判斷數組中9個數是否重複
func isRepetition(numChar [9] int) bool {
for i := 0 ; i < len(numChar)-1; i++ {
for j := i+1; j < len(numChar); j++ {
if numChar[i] == numChar[j] {
return true
}
}
}
return false
}