

--获取某元素在表中的位置
local function isInside(value,tab)
for a,v in ipairs(tab) do
if v==value then
return a
end
end
return -1
end
local function print_board(table)
local str=table0..","
for k,v in pairs(table) do
if k>0 and k<81 then
if (k+1)%9==0 then str=str..v..",\n"
else str=str..v..","
end
end
end
print(str)
end
--题目,答案
local nums,num={},{}
--游戏设定:显示概率
local p,pel=0.3,100000
--填充是否有效
local function isRowLegal(i,v)
local row,i1=math.floor(i/9),0
for i1=0,8 do
if (v==numrow\*9+i1)and(i~=row*9+i1) then
return false
end
end
return true
end
local function isColLegal(i,v)
local col,i1=i%9,0
for i1=0,8 do
if (v==numi1\*9+col)and(i~=i1*9+col) then
return false
end
end
return true
end
local function isSubLegal(i,v)
local row=math.floor(i/9)
local col=i%9
local x1=math.floor(row/3)*3
local y1=math.floor(col/3)*3
local i1,i2=0,0
for i1=0,2 do
for i2=0,2 do
if (v==num(x1+i1)\*9+y1+i2)and(i~=(x1+i1)*9+y1+i2) then
return false
end
end
end
return true
end
local function isLegal(i,v)
if (not(isRowLegal(i,v)))or(not(isColLegal(i,v)))or(not(isSubLegal(i,v))) then
return false
end
return true
end
--递归填充数字
local function setN(i)
if i==81 then
return true
elseif numi~=0 then
return setN(i+1)
else
local randOrder,i1={},0
for i1=0,9 do
randOrderi1=i1
end
for i1=1,9 do
local r=math.random(1,9)
local t1=randOrderr
randOrderr=randOrderi1
randOrderi1=t1
end
for i1=1,9 do
if isLegal(i,randOrderi1) then
numi=randOrderi1
if setN(i+1) then
return true
end
end
end
end
numi=0
return false
end
--获取随机数独
local function getNum()
math.randomseed(os.time())
local i1=0
for i1=0,81 do
numi1=0
end
setN(0)
return num
end
local function run()
num=getNum()
print("随机生成数独")
print_board(num)
for j1=0,80 do numsj1=numj1 end
cl={}
for j1=0,80 do
j2=math.random(1,pel)
if j2<=p*pel then
clj1=numsj1
--numj1=0
else
clj1=0
numj1=0
end
end
print("生成题目")
print_board(num)
end
run()