日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

c语言数独合法验证,JavaScript数独验证

發布時間:2023/12/10 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言数独合法验证,JavaScript数独验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Js數獨驗證

image.png

在網上看到一道數獨驗證的題。

數獨游戲是在一個9*9的方格中進行填數字的游戲,需要滿足的規則是每行每列和每個子九宮格都是1~9的不重復數字

需要完成的:給定一個九項的二維數組,用代碼確認九宮格的填寫是否符合數獨規則;

例如:

var board = [

[5, 3, 4, 6, 7, 8, 9, 1, 2],

[6, 7, 2, 1, 9, 5, 3, 4, 8],

[1, 9, 8, 3, 4, 2, 5, 6, 7],

[8, 5, 9, 7, 6, 1, 4, 2, 3],

[4, 2, 6, 8, 5, 3, 7, 9, 1],

[7, 1, 3, 9, 2, 4, 8, 5, 6],

[9, 6, 1, 5, 3, 7, 2, 8, 4],

[2, 8, 7, 4, 1, 9, 6, 3, 5],

[3, 4, 5, 2, 8, 6, 1, 7, 9]

]

validSolution(board);

=>true

我的想法是,既然每行每列每個子九宮格都是1~9的不重復數字,也就是說只要判斷這三個條件滿足和為45就好了;

var equals = function(number){

return n==45;

}//判斷結果是否為45

很明顯 board有9行9列 判斷9行需要一次遍歷 判斷9列又需要一次,看起來有點麻煩。

我們可以把行的和列的相加結果放在數組里,最后遍歷兩個數組來進行判斷。

var validSolution = function(board){

var rows = [0,0,0,0,0,0,0,0,0];

var columns = [0,0,0,0,0,0,0,0,0];

for(var i=0;i<9;i++){

//i表示行 j表示列

for(var j=0;j<9;j++){

rows[i]+=board[i][j];

columns[j]+=board[i][j];

}

}

}

很簡單的 rows和columns里就有了前兩個條件的數據,接下來是第三個條件

每個九宮格的和都是45

找一下子格在二維數組的規律

01 02 03

11 12 13

21 22 23

沒找到,再來一個

04 05 06

14 15 16

24 25 26

可以看出,小格是以三行或者三列為一個單位的,小格的相加數可以組成一個二維數組

[[0,0,0],[0,0,0],[0,0,0]]

于是,第三個條件也可以做了

var osums = [[0,0,0],[0,0,0],[0,0,0]];

for(var i=0;i<9;i++){

for(var j=0;j<9;j++){

osums[Math.floor(i/3)][Math.floor(j/3)] += board[i][j];

}

}

與上面的整合起來就是

var equals = function(number){

return number==45;

}//判斷結果是否為45

var validSolution = function(board){

var rows = [0,0,0,0,0,0,0,0,0];

var columns = [0,0,0,0,0,0,0,0,0];

var osums = [[0,0,0],[0,0,0],[0,0,0]];

for(var i=0;i<9;i++){

//i表示行 j表示列

for(var j=0;j<9;j++){

rows[i]+=board[i][j];

columns[j]+=board[i][j];

osums[Math.floor(i/3)][Math.floor(j/3)] += board[i][j];

}

}

for (var i=0;i<3;i++) if (!osums[i].every(equals)) return false;

return (rows.every(equals) && columns.every(equals));

}

這樣的結果是可以通過我們上面例子的驗證的 但是...(下回更)

總結

以上是生活随笔為你收集整理的c语言数独合法验证,JavaScript数独验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。