马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zhangjinxuan 于 2023-8-24 20:27 编辑
原帖如下:https://fishc.com.cn/forum.php?m ... p;page=1#pid6299362
本程序在陈尚涵原本的代码上做了亿点点改动,让小朋友做起来更快乐,大朋友做起来也不乏趣味。
这个生成口算题的代码可以生成加减乘除的运算,也能含括号。
当然可以自定义数字数量,可以是 114514 个,这样大朋友做起来才不乏趣味。
不过即使这样,还是太简单了,于是我把乘方,三角函数,对数,平方根也加入在了这里面,因为这样才能适合大朋友的水平,小朋友也可以超前学习。
算法流程:
1. 生成表达式树,一切都随机。
2. 中序遍历表达式树并输出,在这期间任意添加高级运算。
就这么简单,不过这其中还是有算法滴~
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10; // 若电脑配置好点的,可以多亿点,这样你家孩子就会更加快乐。
bool highopt = 1; // 是否支持高级运算,如乘方,三角函数,对数,平方根
struct Tree { // 表达式树节点
int left; // 左儿子信息
int right; // 右儿子信息
bool isopt; // 是否为运算符
int info; // 信息(如 + - * /, 1 2 3 4 5 6)
} a[10004];
int tot = 1; // 节点个数
void build(int root) { // 建树
if (tot >= MAXN) { // 如果大于了,就不能建运算符节点了。
a[root].info = rand();
return;
}
// 否则,我们可以继续深入去建树。
a[root].isopt = 1;
a[root].left = ++tot;
a[root].right = ++tot;
int opt = rand() % (4 + highopt); // 决定运算符
switch (opt) {
case 0: a[root].info = '+'; break;
case 1: a[root].info = '-'; break;
case 2: a[root].info = '*'; break;
case 3: a[root].info = '/'; break;
case 4: a[root].info = '^'; break;
}
// 然后继续建树
build(a[root].left);
build(a[root].right);
}
void output(int root, bool kuohao) { // 中序遍历输出树
if (root == 0) return;
int sanjiao = !(rand() % 3) & highopt; // 为了不让频率太高,这里只有 1/3 的概率生成三角函数
if (sanjiao) {
int opt = rand() % 6; // 有 sin, cos, tan, sqrt, log
switch (opt) {
case 0: printf("sin"); break;
case 1: printf("cos"); break;
case 2: printf("tan"); break;
case 3: printf("sqrt"); break;
case 4: printf("log"); break;
}
}
if (a[root].isopt == 0) { // 特判为数字的情况
if (sanjiao) putchar('(');
printf("%d", a[root].info);
if (sanjiao) putchar(')');
return;
}
if (kuohao | sanjiao) putchar('(');
output(a[root].left, rand() % 2); // 左
putchar(a[root].info); // 根
output(a[root].right, rand() % 2); // 右
if (kuohao | sanjiao) putchar(')');
}
int main() {
srand(rand() * clock() + time(0));
build(1);
output(1, 0);
return 0;
}
当然,因为大部分电脑缓冲区的限制,这个程序若你把 MAXN 调高一点就崩溃了,这个就不是我的原因了。
欢迎大家来测试我的口算题出题器!
@歌者文明清理员 @陈尚涵 @sfqxx @Ewan-Ahiouy
求评分 (这内容太水了,估计不能精华)
演示效果
sin(((((cos(cos(tan((tan((tan((cos(cos((((sin((cos((tan((tan(((cos(((cos((cos(sin(cos((sin(cos((cos((tan(((tan((tan(cos(tan((cos(cos((sin((sin((cos(cos(sin((((((cos((tan((cos((cos(tan(sin((cos(cos(sin(((((cos(((((cos(sin(tan(sin((cos(cos(cos((tan((sin(cos(((sin((((cos(((((tan(((cos((cos(sin(((((cos((tan(((tan(((cos(cos(sin(sin((tan(sin(((sin(cos((sin(tan(cos(sin((sin((sin(tan(tan(sin(tan(((((((((sin((tan(((tan((sin((cos(((sin((((tan((((((((sin((((cos(tan(cos(tan(tan((((((((cos((sin(sin((tan((cos(sin((cos((cos(tan((((((((cos(tan((cos((sin((sin(tan(tan(cos(cos(((sin(cos(((tan(cos((cos(cos((tan(sin(sin(cos(tan(tan((cos((tan(cos((((sin(tan(tan(sin((cos((((tan(cos(((tan(cos(cos((cos(tan(((cos(tan((sin((((sin((tan(cos((((cos((((sin(((((sin(((((((sin(cos((cos(((tan(sin(((tan(sin(tan(tan(tan((cos((((((tan(((24895/tan(21443))-26931)/23647**tan(14612)+20020)**25413**cos(25648))**cos(10438)+sin(11764))**27340**sin(16270)/3605+12301)-1459)+25990)-cos(10604))**25229)+23521**10286)**26390+6374)/sin(27153)*27694**tan(18606))-32661)**cos(22237))-31103)+727)*4866)+tan(7707)-sin(18803)+cos(9006))*tan(32167)/1645+cos(30198))-21117)-8565/5396)-tan(11795))+cos(1842))/20595)*29701*21434)**15375)-30889)+32319)-tan(9920)+32546+18236)-26203)+8487)/cos(27896))/tan(1754)/cos(11109))-sin(26784))**tan(27662))-15704*sin(20458))*31054)*15496)+19610)*cos(1874))-tan(28109)+12325-6836)-19824)/2163/cos(7795))**1358)+7256)-sin(25045))**26943)+9293)+tan(13425)-24717)-9552)/8112)**sin(10955))-24123/15189*7351)+12722)*7626+5403*1611*20355)+30453)**11011)-13466)+30654+23305/1460)+14338*14941)-5868)*cos(2061))**19248+32100)**30302**5469)+12425)-sin(29882))+11391)*26583)/cos(32456))+19511)+9617)**cos(11072))-8425)+14334+sin(9728)**12267-3399*24333)**23199)+tan(18919))+cos(30721))/tan(21522))**cos(15925))/12407)/sin(1185))-4224**30776)**29122**cos(15104)/cos(9699)/6360)-20172**tan(17252)/6513*sin(22080))-5029)*11756)**cos(7649))/12056)**16353-18734)**8064+5710)+sin(4935))-19486)*tan(22145))-cos(3094)+21198)+cos(22322))/sin(21396))*18479)-22981)-cos(4291))**15035)-cos(22888)**cos(19281))+24759)/8281)**24164**30748**cos(3933))**15500)+15258)-19532)**tan(19352))**26813)+29343)+22962)**sin(23616))**7030)*32424/21060)/cos(197))/sin(22131))/23115)**1742*17685)*15099/4741)**15844-tan(19648))*14449)+2817)+30491)-cos(22874)-2342**sin(22423))*sin(28281))**sin(4130))-29041)+20244)**29737)*tan(17120))/29954)/sin(15161))/27763+16404)*30323)**tan(18950))*3052)/tan(28236))+29984)**cos(9272)**9194)*14038)*23865)/19728)**4923/919*7701)*tan(12118))-12055)*cos(21563)/31433)+sin(31646))-tan(14418))-sin(11919))+cos(18682)-15306)-12502)**28202)*4591**16336)**tan(9553))*sin(14163))+18922**18365)+sin(16171))/4383)*4537-3834)/12987**27354)+sin(13960))/7374)*23994)/4264-tan(25593)/32293)/10744)*21356**cos(15479)+sin(19600))*2125)/26601)**19399**9868-cos(6099))-16680*2015)*32007)-19794)-27161)**21500)-23072)+cos(12028))-8828/14831)-cos(1327))-30811)**cos(17154))+19895)-cos(10245))/14983)**11440-28501)/22901)-19612-cos(18309))*24284)**12563)**cos(8299)/21596)-22216)*18491*20336)+5652)*8336)+19541*29701)/5613)/22399/1624-8916)/1845+sin(19903))-sin(31629))/tan(6290))-sin(3621))*18359)**2966)-tan(28651))**28166)**tan(407))*tan(12206))/29624)*25239**tan(13104)**sin(16178)/cos(24952))/tan(10419)**sin(1546)+23905)*12286)-cos(31279))/12720/cos(29792))/11879**258**12879-24960)/tan(3919)*1448*19839)/14020)+13381)*23752+cos(22881))+13726*19835+22548)**cos(31210)*26362)/8642)**sin(15984))-cos(18558))/sin(29821))/tan(4790))/sin(3927))**6593-9999)*12598)*tan(5499))+21930)/tan(11927))**sin(30232)+3244)*sin(5593))-5893)**29466*24315)-32298)*3734)/sin(4123)**15647)/906)**24915/tan(10379))+cos(5656)+5385)+19932)*7456/12818)+tan(23345))+5987+11722+29835/406/30971+tan(12266))**sin(2488))+16047)+24083**29887/805)+3556*sin(1085))-29728)-sin(10141))*20456-27189*3953)/cos(31305))/17737)/tan(12318)-sin(208))-15643/cos(5958))+sin(19726)*19087**29294)-25312**15821)/15079+8678)*cos(31284))/4314)-sin(22506))/25758)**20487)+cos(29615))**18362)**31874)*16803)+sin(9542))-tan(2297))**31481)+13026-29148)+3968)-sin(15048))+12424**7157)+6484)-12595)/3285)*22176)+cos(20437))-23140+10843)/sin(13564)+2361**cos(17681))-26894)**tan(13051)/15929)/346)*27034**tan(15206)-sin(2058)**30448+6905)+20258/14991+26236-sin(17988))**12721**28365)-6719)+3273)-16123)**4511+2549/tan(3167))**20047+19115)-30208*7670)*18085)-20372*cos(15810))-tan(25202))/18470**30578)**30027)-4538*tan(3822))-sin(8831))+32308)-16395+cos(29456))**tan(18962))**10186)**3475**cos(10714)+tan(19666))*tan(6768))/29755)+11355/19235)/4670*10180**26403**10213)**cos(11502)/sin(15381))**5962)**350*sin(20217)+1491-30900-13940)/cos(25597))**26931)/sin(10642)*19488-32354)**tan(2828))**26412)-18207)+6717-cos(6193))-2015)-19947)+1908)*5885*22113)/9961)*16164)+tan(30511))*12877/26340)/10303)**sin(21496))-6619-tan(25530))-3962)/cos(7251)+sin(238))-16213)-sin(22118))/5525)**cos(6485)/7901)
|