Excel怎样随机生成四则混合运算数学题? |
您所在的位置:网站首页 › pta算式自动判断 › Excel怎样随机生成四则混合运算数学题? |
答案经过补充和修改,着急看最终结果的可以直接从“二、实现整除”开始看。 〇、内容索引一、原始答案 随机生成四则运算 二、实现整除 计算式的结果固定为“一个乘除运算带一个加减运算”的形式,除法的运算结果都是能整除的。 三、拒绝负数 在实现整除的基础上,所有运算式的结果不出现负数。 四、降低难度 在结果不出现负数的基础上,乘除运算限制在“九九乘法表”范围内,最终结果加法不超过200,减法不超过100。 一、原始答案随机生成运算符可以通过RANDBETWEEN和CHOOSE函数实现。 1-1、实现效果(注意:每次结果会不一样。) 1-2、示例公式=RANDBETWEEN(100,1000)&CHOOSE(RANDBETWEEN(1,4),"+","-","*","/")&RANDBETWEEN(100,1000)&"=" 题主的原公式前后不变,中间连接部分使用CHOOSE函数在"+","-","*","/"四个运算符中随机抽取一个。 题主留言,想要生成“a+b-c”的混合四则运算算式,这个也是可以做到的。 1-3、重新拼接把上面算式重新分解再拼接一下就可以了: =RANDBETWEEN(100,1000)&CHOOSE(RANDBETWEEN(1,4),"+","-","*","/")&RANDBETWEEN(100,1000)&CHOOSE(RANDBETWEEN(1,4),"+","-","*","/")&RANDBETWEEN(100,1000)&"=" 1-5、公式简析A部分:RANDBETWEEN(100,1000),目的:生成100-1000的整数; B部分:CHOOSE(RANDBETWEEN(1,4),"+","-","*","/"),目的:随机抽取四则运算符。 C部分:=,目的:等号。 一开始的公式模式是:A&B&A&C,既“数字 符号 数字 =” 后面的公式模式是:A&B&A&B&A&C,既“数字 符号 数字 符号 数字=” 题主也可以根据需求,组合更长的四则运算算式,比如: 有问题请留言。 二、实现整除题主提了新的需求,算式的结果需要为整数,既除法算式都可以被整除。 我这才知道题主是要给小学生出题。 回想起我小学时被大位数乘除法、尤其是除不尽的除法所支配的恐惧,我平衡了题目难度。 (我觉得等题主的孩子会看知乎了,应该给我补个赞。) 2-1、实现效果修改内容: ①除法都是可以被整除的,避免了一堆除不尽的小数。 ②题目难度调整为了“一个乘除运算带一个加减运算”的形式,取消了繁琐的纯乘除运算,也取消了过于简单的纯加减运算。 实际验证了100000条随机算式,“*带+”、“*带-”、“/带+”和“/带-”这四种类型计算式的数量大抵相等。 ③把乘除法的元素范围限定为了11~99,既两个乘数、除数以及除法的运算结果都在这个范围内。 ②和③一起,把算式的结果控制在了大约±10000的范围内,避免了连乘时高达8位的运算结果。 =CHOOSE(RANDBETWEEN(1,2),RANDBETWEEN(100,1000)&CHOOSE(RANDBETWEEN(1,2),"+","-")&CHOOSE(RANDBETWEEN(1,2),RANDBETWEEN(11,99)&"*"&RANDBETWEEN(11,99),TEXTJOIN("",1,IF(((ROW($11:$99)=RANDBETWEEN(11,99))*(COLUMN($I:$CU)=RANDBETWEEN(11,99))),ROW($11:$99)*COLUMN($I:$CU)&"/"&ROW($11:$99),"")))&"=",CHOOSE(RANDBETWEEN(1,2),RANDBETWEEN(11,99)&"*"&RANDBETWEEN(11,99),TEXTJOIN("",1,IF(((ROW($11:$99)=RANDBETWEEN(11,99))*(COLUMN($I:$CU)=RANDBETWEEN(11,99))),ROW($11:$99)*COLUMN($I:$CU)&"/"&ROW($11:$99),"")))&CHOOSE(RANDBETWEEN(1,2),"+","-")&RANDBETWEEN(100,1000)&"=") ①数组公式,需要三键结束输入(CTRL+SHIFT+ENTER)。 ②一个公式自动生成一个算式。 ③使用前需要确认使用的EXCEL版本支持TEXTJION函数。 2-3、原理简析公式太啰嗦就不分析了,简单说一下原理吧。 ①选取两个11~99的整数,相乘得到的结果作为被除数、其中一个数作为除数,这样构造的除法是一定能被整除的。(此步用VBA比较好实现,使用公式就比较繁琐,这也是这个公式这么冗长的主要原因。) ②使用CHOOSE函数随机显示乘法公式或者除法公式,乘法公式就用最简单的随机数相乘公式,除法公式使用①构造的新公式。 ③使用CHOOSE函数随机在②生成的乘除公式前面或后面生成加减公式。 2-4、批量求解(随机生成的这么多算式,题主应该不想用计算器一一计算结果吧) ①求解公式 ="="&LEFT(A2,LEN(A2)-1) *其中A2为算式所在单元格。 ②求解步骤 在算式右边输入公式(示例中为B列)→ 将结果“选择性粘贴”为值→选中所有“求解”区域→打开“查找替换”功能→将“=”替换为“=”→ →效果达成。 ①“生成算式的公式”为数组公式,需要三键结束输入(CTRL+SHIFT+ENTER)。 ②输入“生成算式的公式”后不要随意删减行和列,这样有可能影响公式正常运行。建议先调整好需要的格式再输入公式。 ③如果题主使用的是WPS,批量求解也可以通过EVALUATE函数实现。 =EVALUATE(LEFT(A2,LEN(A2)-1)) 有问题请留言。 祝孩子学习进步。 三、拒绝负数评论区有人留言说想要“避免减法里面前面的数比后面的小”既,最终结果不能为负数,这个需求也可以实现。 (实际验证了100000条随机算式,“*带+”、“*带-”、“/带+”和“/带-”这四种类型计算式的数量大抵相等。公式结果最小值为0,没有负值。) 算式公式 =CHOOSE(RANDBETWEEN(1,8),RANDBETWEEN(11,99)&"*"&RANDBETWEEN(11,99)&"+"&RANDBETWEEN(100,1000),RANDBETWEEN(100,1000)&"+"&RANDBETWEEN(11,99)&"*"&RANDBETWEEN(11,99),CONCAT(IF(((ROW($11:$99)=RANDBETWEEN(11,99))*(COLUMN($K:$CU)=RANDBETWEEN(11,99))),ROW($11:$99)*COLUMN($K:$CU)&"/"&ROW($11:$99),""))&"+"&RANDBETWEEN(100,1000),RANDBETWEEN(100,1000)&"+"&CONCAT(IF(((ROW($11:$99)=RANDBETWEEN(11,99))*(COLUMN($K:$CU)=RANDBETWEEN(11,99))),ROW($11:$99)*COLUMN($K:$CU)&"/"&ROW($11:$99),"")),CONCAT(IF(((ROW($11:$99)=RANDBETWEEN(11,99))*(COLUMN($K:$CU)=RANDBETWEEN(11,99))),ROW($11:$99)&"*"&COLUMN($K:$CU)&"-"&RANDBETWEEN(1,ROW($11:$99)*COLUMN($K:$CU)),"")),CONCAT(IF(((ROW($11:$99)=RANDBETWEEN(11,99))*(COLUMN($K:$CU)=RANDBETWEEN(11,99))),RANDBETWEEN(ROW($11:$99)*COLUMN($K:$CU),9999)&"-"&ROW($11:$99)&"*"&COLUMN($K:$CU),"")),CONCAT(IF(((ROW($11:$99)=RANDBETWEEN(11,99))*(COLUMN($K:$CU)=RANDBETWEEN(11,99))),ROW($11:$99)*COLUMN($K:$CU)&"/"&ROW($11:$99)&"-"&RANDBETWEEN(10,COLUMN($K:$CU)),"")),CONCAT(IF(((ROW($11:$99)=RANDBETWEEN(11,99))*(COLUMN($K:$CU)=RANDBETWEEN(11,99))),RANDBETWEEN(COLUMN($K:$CU),9999)&"-"&ROW($11:$99)*COLUMN($K:$CU)&"/"&ROW($11:$99),"")))&"=" *数组公式,需要三键结束输入(CTRL+SHIFT+ENTER)。 *输入“生成算式的公式”后不要随意删减行和列,这样有可能影响公式正常运行。建议先调整好需要的格式再输入公式。 四、降低难度有人留言说想要缩小计算范围,乘除法要控制在”九九乘法表“范围内,最终结果不超过200,最好不超过100,这个需求可以通过修改参数实现。 (实际验证了100000条随机算式,“*带+”、“*带-”、“/带+”和“/带-”这四种类型计算式的数量大抵相等。公式结果最小值为0,“/带+”计算式最大值为108,“*带+”计算式最大值为180,没有超过200,剩余计算式的最大值也没有超过100。) 示例公式 =CHOOSE(RANDBETWEEN(1,8),RANDBETWEEN(1,9)&"*"&RANDBETWEEN(1,9)&"+"&RANDBETWEEN(1,99),RANDBETWEEN(1,99)&"+"&RANDBETWEEN(1,9)&"*"&RANDBETWEEN(1,9),CONCAT(IF(((ROW($1:$9)=RANDBETWEEN(1,9))*(COLUMN($A:$J)=RANDBETWEEN(1,9))),ROW($1:$9)*COLUMN($A:$J)&"/"&ROW($1:$9),""))&"+"&RANDBETWEEN(1,99),RANDBETWEEN(1,99)&"+"&CONCAT(IF(((ROW($1:$9)=RANDBETWEEN(1,9))*(COLUMN($A:$J)=RANDBETWEEN(1,9))),ROW($1:$9)*COLUMN($A:$J)&"/"&ROW($1:$9),"")),CONCAT(IF(((ROW($1:$9)=RANDBETWEEN(1,9))*(COLUMN($A:$J)=RANDBETWEEN(1,9))),ROW($1:$9)&"*"&COLUMN($A:$J)&"-"&RANDBETWEEN(1,ROW($1:$9)*COLUMN($A:$J)),"")),CONCAT(IF(((ROW($1:$9)=RANDBETWEEN(1,9))*(COLUMN($A:$J)=RANDBETWEEN(1,9))),RANDBETWEEN(ROW($1:$9)*COLUMN($A:$J),99)&"-"&ROW($1:$9)&"*"&COLUMN($A:$J),"")),CONCAT(IF(((ROW($1:$9)=RANDBETWEEN(1,9))*(COLUMN($A:$J)=RANDBETWEEN(1,9))),ROW($1:$9)*COLUMN($A:$J)&"/"&ROW($1:$9)&"-"&RANDBETWEEN(1,COLUMN($A:$J)),"")),CONCAT(IF(((ROW($1:$9)=RANDBETWEEN(1,9))*(COLUMN($A:$J)=RANDBETWEEN(1,9))),RANDBETWEEN(COLUMN($A:$J),99)&"-"&ROW($1:$9)*COLUMN($A:$J)&"/"&ROW($1:$9),"")))&"=" *数组公式,需要三键结束输入(CTRL+SHIFT+ENTER)。 *输入“示例公式”后不要随意删减行和列,这样有可能影响公式正常运行。建议先调整好需要的格式再输入公式。 有问题请留言。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |