速算24点检测生成核心lua

屏幕上输入1〜10范围内的4个整数(可以有重复),对它们进行加、减、乘、除四则运算后(可以任意的加括号限定计算的优先级),寻找计算结果等于24的表达式。\n\n例如输入4个整数4、5、6、7,可得到表达式:4*((5-6)+7)=24。这只是一个解,要求输出全部的解。要求表达式中数字的顺序不能改变。\n\n思路:\n拼凑加减乘除,使4个数的运算结果等于24。\n\n由于四则运算中,乘除的优先级高于加减,所以必须"加括号"来限定4个数之间运算优先级。\n\n例如:A+B*C-D 这个式子,通过增加括号,可以产生多种结果,比如 (A+B)*(C-D) 和 A+(B*C-D)。\n\n那么总共有几种加括号的方法呢,该如何分类呢?\n\n要想将4个数字的运算优先级细分,必须使用两对括号。\n\n可以这么理解:我们的目的是将4个数的运算转换成两个"数"的运算(这里的"数"包括括号表达式),而每两个数运算,就能得出一个结果,即每对括号可以减少一个要计算的数字(如(A+B)*(C+D)中,A和B运算,使式子变成了3个数,C接着和D运算,使式子剩下两个数字)。4-2=2即为需要的括号数。\n\n下面列举所有可能的括号表达式:(#表示四则运算符)\n\n((A#B)#C)#D\n(A#(B#C))#D\nA#((B#C)#D)\nA#(B#(C#D))\n(A#B)#(C#D)\n具体思路:\n\n上面5种括号表达式都可以单独写成函数,函数内部按照括号的优先级+从左往右的顺序进行运算,最后返回计算结果。\n\n每个表达式中有3个'#'号,它们是四则运算符(+、-、*、/),可以定义一个全局字符数组,存放4这四个字符。\n\nchar my_oprator4 = {'+', '-', '*', '/'};\n

--24点游戏制作

--星空露珠工作室出品

local flag=false

local operator={'+','-','*','/'}

local nr,nr0,nrnew={},{},{}

local tb1,tb0,t0,t1,t2={},{},{},{},{}

local str,str0="",""

--运算两个数返回运算值

local function ce(nr1,nr2,operator0)

--print(nr1,nr2,operator0)

if operator0=='+' then return nr1+nr2

elseif operator0=='-' then return nr1-nr2

elseif operator0=='*' then return nr1*nr2

elseif operator0=='/' and nr2~=0 then return nr1/nr2

else return -1

end

end

--获取重复数组个数

local function c(t)

local t0={}

local t1={}

local t2={}

for _,v in ipairs(t)

if t0v==nil then t1#t1+1=v t0v=1 else t0v=t0v+1 end

end

if #t1==1 then t2={t11,t11,t11,t11}

elseif #t1==3 then

if t0t1\[1]==2 then t2={t12,t13,t11,t11}

elseif t0t1\[2]==2 then t2={t11,t13,t12,t12}

elseif t0t1\[3]==2 then t2={t11,t12,t13,t13}

end

elseif #t1==2 then

if t0t1\[1]==2 then t2={t11,t11,t12,t12}

elseif t0t1\[1]==1 then t2={t11,t12,t12,t12}

elseif t0t1\[1]==3 then t2={t12,t11,t11,t11}

end

elseif #t1==4 then t2={t11,t12,t13,t14}

end

return t1,t0,t2

end

--进行运算组合

local function c2(num1,num2,num3,num4)

for i=1,4 do

operator1=operatori

firstResult =ce(num1,num2,operator1)

midResult =ce(num2,num3,operator1)

tailResult =ce(num3,num4,operator1)

for j=1,4 do

operator2=operatorj

firstMidResult = ce(firstResult,num3,operator2)

firstTailResult= ce(num3,num4,operator2)

midFirstResult = ce(num1,midResult,operator2)

midTailResult = ce(midResult,num4,operator2)

tailMidResult = ce(num2,tailResult,operator2)

for k=1,4 do

operator3=operatork

if ce(firstMidResult,num4,operator3)==24 then

str0=str0.."(("..num1..operator1..num2..")"..operator2..num3..")"..operator3..num4..','

flag = true return

end

if ce(firstResult,firstTailResult,operator3) == 24

str0=str0.."("..num1..operator1..num2..")"..operator3.."("..num3..operator2..num4..")"..','

flag = true return

end

if ce(midFirstResult,num4,operator3) == 24

str0=str0.."("..num1..operator2.."("..num2..operator1..num3.."))"..operator3..num4..','

flag = true return

end

if ce(num1,midTailResult,operator3) == 24

str0=str0..num1..operator3.."(("..num2..operator1..num3..")"..operator2..num4..")"..','

flag = true return

end

if ce(num1,tailMidResult,operator3) == 24

str0=str0..num1..operator3.."("..num2..operator2.."("..num3..operator1..num4.."))"..','

flag = true return

end

end

end

end

end

--各种排序组合

local function c1(nrnew)

local tb1,tb0={},{}

local nr={}

local tb1,tb0,nr=c(nrnew)

--print(unpack(tb1))

print(unpack(nrnew))

str0="key="

if #tb1==1 then c2(nr1,nr2,nr3,nr4)

elseif #tb1==3 then c2(nr1,nr2,nr4,nr4)

c2(nr1,nr4,nr2,nr4)

c2(nr1,nr4,nr4,nr2)

c2(nr2,nr1,nr4,nr4)

c2(nr2,nr4,nr1,nr4)

c2(nr2,nr4,nr4,nr1)

c2(nr4,nr4,nr2,nr1)

c2(nr4,nr2,nr4,nr1)

c2(nr4,nr4,nr1,nr2)

c2(nr4,nr1,nr4,nr2)

c2(nr4,nr1,nr2,nr4)

c2(nr4,nr2,nr1,nr4)

elseif #tb1==2 then

if math.abs(tb0tb1\[1]-tb0tb1\[2])==0 then

c2(nr2,nr2,nr4,nr4)

c2(nr2,nr4,nr2,nr4)

c2(nr2,nr4,nr4,nr2)

c2(nr4,nr2,nr2,nr4)

c2(nr4,nr2,nr4,nr2)

c2(nr4,nr4,nr2,nr2)

elseif math.abs(tb0tb1\[1]-tb0tb1\[2])==2 then

c2(nr1,nr4,nr4,nr4)

c2(nr4,nr1,nr4,nr4)

c2(nr4,nr4,nr1,nr4)

c2(nr4,nr4,nr4,nr1)

end

elseif #tb1==4 then

for i=1,4 do

for j=1,4 do

if i~=j then

for m=1,4 do

if m~=i and m~=j then

for n=1,4 do

if n~=i and n~=j and n~=m then

c2(nri,nrj,nrm,nrn)

end

end

end

end

end

end

end

end

end

local game={}

--全部题目生成 也可不需要生成,生成时判断可否有解

local function main0()

local nr={}

for i=1,13 do

for j=i,13 do

for m=j,13 do

for n=m,13 do

flag = false

local nr={i,j,m,n}

c1(nr)

if flag==true then

table.insert(game,'{'..i..','..j..','..m..','..n..str0..',},')

--str=str..'{'..i..','..j..','..m..','..n..str0..'},'

end

end

end

end

end

end

--main0() --生成全部

c1({3,6,7,10}) --输入求解

print(str0)

相关推荐
小马爱打代码2 分钟前
框架 - 组件 - 中间件:生产级参数配置指引
数据库·中间件
刘科领3 分钟前
修改jdk 第一步: 仓库以及构建(jdk17)
java·开发语言
C+-C资深大佬9 分钟前
C++ 中的 constexpr与 const区
java·开发语言·c++
8Qi810 分钟前
LeetCode 4:寻找两个正序数组的中位数 —— 二分查找法
java·算法·leetcode·职场和发展·二分查找
仙俊红14 分钟前
Java 单例模式:类里面为什么可以有自己类型的字段?
java·开发语言·单例模式
8Qi814 分钟前
LeetCode 32:最长有效括号 —— 栈 + 标记法 题解
java·数据结构·算法·leetcode·职场和发展··括号匹配
机器学习之心16 分钟前
198种组合算法+优化CNN-LSTM+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备
深度学习·算法·cnn-lstm·shap分析·198种组合算法
Tairitsu_H17 分钟前
[LC优选算法#3] 滑动窗口 | 将x减到0的最⼩操作数 | ⽔果成篮 | 字⺟异位词
c++·算法·leetcode·滑动窗口
_Evan_Yao18 分钟前
面向对象实战:用 Java/Python 设计一个简单的“怪物战斗”小游戏
java·开发语言
asdfg125896319 分钟前
一文通俗理解JDBC中的核心概念+案例
java·数据库·oracle·jdbc