速算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 分钟前
C++ vector
开发语言·c++
小肝一下8 分钟前
3. 单链表
c语言·数据结构·c++·算法·leetcode·链表·dijkstra
Database_Cool_12 分钟前
阿里云 Tair(企业级内存数据库)vs 腾讯云 Redis 云缓存深度对比:性能/数据结构/成本全维度 Benchmark
数据库·阿里云·缓存
劈星斩月15 分钟前
监督学习算法 之 决策树
学习·算法·决策树
学计算机的计算基20 分钟前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
流星白龙20 分钟前
【Redis】1.Redis特性
数据库·redis·缓存
丁小未22 分钟前
Unity 几种常见合批手段的要求
游戏·unity·合批·srpbatcher·动态合批·静态合批
奶糖 肥晨23 分钟前
DBeaver 安装与 MySQL 连接配置教程
数据库·mysql
tachibana224 分钟前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
AOwhisky26 分钟前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算