From b52c64b196c5e384276d12da727aea84e4942272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=9F=B9=E6=AF=85?= <2642034697@qq.com> Date: Sun, 28 Sep 2025 21:32:57 +0800 Subject: [PATCH] 123 --- .idea/codeStyles/codeStyleConfig.xml | 5 +++ .idea/encodings.xml | 6 +++ src/JuniorQuestionGenerator.class | Bin 966 -> 1268 bytes src/JuniorQuestionGenerator.java | 57 ++++++++++++++++-------- src/PrimaryQuestionGenerator.class | Bin 1138 -> 1541 bytes src/PrimaryQuestionGenerator.java | 63 ++++++++++++++++++--------- src/SeniorQuestionGenerator.class | Bin 1001 -> 1221 bytes src/SeniorQuestionGenerator.java | 43 ++++++++++++------ 8 files changed, 121 insertions(+), 53 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/encodings.xml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..b9d18bf --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..ff7987a --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/JuniorQuestionGenerator.class b/src/JuniorQuestionGenerator.class index 754cb5e0b4d849df988fb14f4cdbdc8560895282..a579601f80575a4581be23ad5f8fb27eeae6f386 100644 GIT binary patch delta 787 zcmX|9O-vI}5dPkFyYF>bv@Tsrft7+FZFi+mpeTP;KoP}*X##0T2*naCAthopTueE5 zFy6>sgkWNb3EuQnqehMo0)v`-tixS%7??(2LSqT zO+^DbRm2eINC;R0w!j(J(WOE|QlQ(_Jpw6?UiaE5(C6xYHz}=TUTwSIj=+HHJu7fd zV31>oW0+%vK^ZQVisexTUo1YuAdjyVw&pi9FQb=Zlq0kCsjH?DO=M^|j|+~?T1*XN z7}qd?iwx3y%Dr8p8ebmlFoc~$7H(r;Q4N#0tYHdQ$ckyWifOvUsZDewnsMgXOsH;d zdL@51pIptCmXq1?da<-Tmgc zN_GQU5hk7(B1D=*nuaCW>}*Q)6_b1lSpX+_5-n~7V7u_6hP*#*QH3Ngj4E&8%lULU zo0D~aHs{xs?4WGQ1#%DiZIhDHiZ9I#Ztmf+!42gJChaPCTG+vYS0WuS#5Q!x2vi|- z66)-J1yMVw{tK%Hotx=^rPol*%bMLs=s#Ro2F)U7sfAqFLvO@y@Q7?j4uwQ>Ghr>$P14x zm!Cyq55$I`7h<9o9SFik9r_W%FzRX5VN4Ud*NN8!;&6pnyoD(4p$(g8$3sGFA&zY% z@C+8-6ZRvz@fkg1_)72iJC%x3iv+|Gk`NrN9Bmw@7)Lw(jP~;f-HiQ0vlJZo4SzGO Kse=#_PX7f`$%B^w delta 501 zcmX|;J#W-N5Qd-i*RFj|a174H7w#hmApx5J1`I?bL=;FwiWKQ2qH9o!AR)T6P^6)t zp@>`{C@7#v3k5EaNJ+uZ;5Seq1sGp}R+^cedH0=pXMg$M^}`>3z8(WNxDyaDA8?j# zV|oF728M;k4-Mxu=M9U73x*}bvf*M=xunT7x#sfWv)7faR+eK2;k(zQ!3@e=m~o8C9f*pB_t*olMD!Pt#kqg9>iJk`en zE>_KdK0k{?VM>jdNtE~v=}S)?{r!@~Q%(P@X8O}aSEJ;<=!6zNp=h2KB@shWn@d!X xutv%QI&3q~6Zxb4f-W!UaVW_*vZ(h0pA(7*=Y*kBofBG0{boznl1|!m{sGj~MYjL| diff --git a/src/JuniorQuestionGenerator.java b/src/JuniorQuestionGenerator.java index e18a9c1..88880d8 100644 --- a/src/JuniorQuestionGenerator.java +++ b/src/JuniorQuestionGenerator.java @@ -7,27 +7,46 @@ import java.util.Random; public class JuniorQuestionGenerator implements QuestionGenerator { @Override public String generateQuestion(StringBuilder question, Random random) { - // 确保所有初中题目都包含至少一个平方或开根号的运算符 - int num = random.nextInt(100) + 1; - boolean isSquare = random.nextBoolean(); - - if (isSquare) { - // 生成平方题 - question.append(num).append("^2"); - } else { - // 生成开根号题,确保是完全平方数 - int sqrtNum = random.nextInt(10) + 1; - num = sqrtNum * sqrtNum; - question.append("√").append(num); + // 随机生成1-5个操作数 + int operandCount = random.nextInt(5) + 1; + String[] operators = {"+", "-", "*"}; + String[] chosenOperators = new String[operandCount - 1]; + + // 确定包含平方或开根号的操作数位置 + int specialPosition = random.nextInt(operandCount); + + // 生成所有操作数 + for (int i = 0; i < operandCount; i++) { + if (i == specialPosition) { + // 特殊操作数:平方或开根号 + boolean isSquare = random.nextBoolean(); + int num = random.nextInt(100) + 1; + + if (isSquare) { + // 生成平方题 + question.append(num).append("^2"); + } else { + // 生成开根号题,确保是完全平方数 + int sqrtNum = random.nextInt(10) + 1; + num = sqrtNum * sqrtNum; + question.append("√").append(num); + } + } else { + // 普通操作数 + int num = random.nextInt(100) + 1; + question.append(num); + } + + // 添加运算符(除了最后一个操作数) + if (i < operandCount - 1) { + chosenOperators[i] = operators[random.nextInt(operators.length)]; + question.append(" " + chosenOperators[i] + " "); + } } - // 添加一些其他运算符使题目更复杂 - int complexity = random.nextInt(2) + 1; - for (int i = 0; i < complexity; i++) { - String[] operators = {"+", "-", "*"}; - String op = operators[random.nextInt(operators.length)]; - int addNum = random.nextInt(10) + 1; - question.append(" ").append(op).append(" ").append(addNum); + // 10%的概率添加外层括号(如果有多个操作数) + if (operandCount > 1 && random.nextDouble() < 0.1) { + question.insert(0, "(").append(")"); } question.append(" = ?"); diff --git a/src/PrimaryQuestionGenerator.class b/src/PrimaryQuestionGenerator.class index cd819b71c0cbf6d9f55a300e303955434eac3542..06444b51618ddca5bd200384a23b67494ca9f11f 100644 GIT binary patch literal 1541 zcmaJ=-)|IE6#mZc?B2W6Y1s}PV4|NBhh zgztS`Vp^gsFe7kM;1nS~&b~=VY}nqS?XGy&!n=7a3Z2lf)w^``-yG6w zgeby5rkf16UiInEHCn-N@$AhpF~{Aon_N&av(Ux=f70PF_VY_2r1;rHSo0{b9OPY^ zHL;G3-T{5b2G0@8c;FN)pTg5D85;QzF{ljqJ}=vdC~ut-_Ykc`b){NU^jNhP)8o}z zTo=`8CH<2+9ZM?~1E%AtSTvusf{;p%H^nyOWo1$rBE3mxQ*lEmR!YgIl>3YstEOUx z_y@1Y!t=2<5;yU_f2LSPUllj8`gl7jLnClkd}+u^F4~6LkuG5*46%uc++Fn4?m*Lf z+vwxV6N<%`_l4V-k?`5Iv4>rkKT6QnqhGeLu8U3Qg0>#sO)FpGP`-`i0Qx`u9LZc%-`mE3Zum9i^nHQilD_4>MuP5s zfFZVfAfe$1dNG1Nl+cedbbiPNKjD42$|JMNgK~p={|QIk;z{_5vPRjrQ delta 701 zcmZ`$O>YuW6g_WvGw*c@LdQ;#Duou?LT3=gih`EfiW(9V7n78ri75tBYX~-msw>&( z+UUf@nyy^fjSF2kMw52cm2UhkE?la2#*dvZnRD+w_uTh!=5hF&y!QFWr#%4kxU6Fo zM|DhNMqpMVE0L3!ldyDzVEc`{w)k<&UoRz&=_ug14<{sw5+^0*{pyrJN#L}=nWx<+ z5lYJf6@jy~rz=@ucnonO!Z?QocbQG+t5^)H$jUaQb;_0|eb|L%HkZFzIO+wQpEnH?3q&Vzov*QcRuJy&;cD4B8H=W2I0 zZ+1Hjp=^$J)><1IonG60rWD;JCFSlb=>aBjkQ`tz$qt1g-IVYURY{7BqB{2h>>VWx z2|_I(1>raj6Oxo&2ZyBIS3B1Bpzzh|-=xIFE<(+a!JQ^IRHvyLn$y$_;Z)RwY7Y|X z9t{*LnxQ5%4{{4*Nt3@qELjpJubQI7caSi|pJvqLc1#bBxK*`142?p6v5lf-ggrzW zR?@?PhGj&l@FyZc*04@r9NL<1M{P3EsUDSfpbJ!(>?)c|=e~ z40Vj)3JhE&)*&lb$-*vqbD!LKh$DDJMn1;`wvobXvil9Du!{`#F@rA!%#y_Sn*YQK Zgg{bYLLkMMKw6L-X4(G{Q^7qlzW^MWaFPH3 diff --git a/src/PrimaryQuestionGenerator.java b/src/PrimaryQuestionGenerator.java index 10887e0..ef1c2e4 100644 --- a/src/PrimaryQuestionGenerator.java +++ b/src/PrimaryQuestionGenerator.java @@ -7,32 +7,53 @@ import java.util.Random; public class PrimaryQuestionGenerator implements QuestionGenerator { @Override public String generateQuestion(StringBuilder question, Random random) { - int num1 = random.nextInt(100) + 1; // 1-100的随机数 - int num2 = random.nextInt(100) + 1; + // 随机生成1-5个操作数 + int operandCount = random.nextInt(5) + 1; String[] operators = {"+", "-", "*", "/"}; - String op = operators[random.nextInt(operators.length)]; + int[] operands = new int[operandCount]; + String[] chosenOperators = new String[operandCount - 1]; - // 确保减法和除法结果为正整数 - if ("-".equals(op) && num1 < num2) { - int temp = num1; - num1 = num2; - num2 = temp; - } else if ("/".equals(op)) { + // 生成第一个操作数 + operands[0] = random.nextInt(100) + 1; // 1-100的随机数 + question.append(operands[0]); + + // 生成剩余的操作数和运算符 + for (int i = 1; i < operandCount; i++) { + chosenOperators[i-1] = operators[random.nextInt(operators.length)]; + operands[i] = random.nextInt(100) + 1; + + // 确保减法结果非负 + if ("-".equals(chosenOperators[i-1]) && operands[i-1] < operands[i]) { + // 如果当前操作数小于下一个操作数,交换它们 + int temp = operands[i-1]; + operands[i-1] = operands[i]; + operands[i] = temp; + // 更新已添加到问题中的数值 + question.setLength(0); + question.append(operands[0]); + for (int j = 1; j < i; j++) { + question.append(" " + chosenOperators[j-1] + " " + operands[j]); + } + } // 确保除法结果为整数 - num1 = num2 * (random.nextInt(10) + 1); + else if ("/".equals(chosenOperators[i-1])) { + // 调整被除数为除数的倍数 + operands[i-1] = operands[i] * (random.nextInt(10) + 1); + // 更新已添加到问题中的数值 + question.setLength(0); + question.append(operands[0]); + for (int j = 1; j < i; j++) { + question.append(" " + chosenOperators[j-1] + " " + operands[j]); + } + } + + // 添加运算符和操作数 + question.append(" " + chosenOperators[i-1] + " " + operands[i]); } - // 10%的概率添加括号 - if (random.nextDouble() < 0.1) { - question.append("("); - question.append(num1); - question.append(" ").append(op).append(" "); - question.append(num2); - question.append(")"); - } else { - question.append(num1); - question.append(" ").append(op).append(" "); - question.append(num2); + // 10%的概率添加外层括号(如果有多个操作数) + if (operandCount > 1 && random.nextDouble() < 0.1) { + question.insert(0, "(").append(")"); } question.append(" = ?"); diff --git a/src/SeniorQuestionGenerator.class b/src/SeniorQuestionGenerator.class index 4b290f3d1426b6cf37f754fbce38393f4841e1dc..a25a976f5292d87e6cda74d3b59e3c5ed0280717 100644 GIT binary patch delta 755 zcmX|9&rcIU6#k~&?o5|e>e5mdtXBL%%Pv$9i&Oy>6j33@#*lil3L#Ze5~#*t3>On` z8q&mH@nDDvSM^Y$M&d;e{sG3jC%kyqMEs^CZt}kO&Aj)$H~VHb>?<3cf<8LYG2D;gCYNLXU+;99HPn{)j?WqEFM5!cpz}wK!)Ey?ds==X&dy z!f}ZKi9v~>WLWwK0ZsHqPUMfRP+X4pr}p z;p%tscCUa{p1xBVnY(pucAE84=@9|5R9={#uLyLd#;S>czl6Qm$-xM;a7qDso|%~7 zDnT#kLmg`nZ%71o6V3XjB35B3KAIM!sM;p?o3anE8U~ z$b8Q56U@klf>|?WCRUd4Bxc4!FEMIvDU?=(wZh8hq$_<_u2ayHQ+{NsUOOB1Ty|-2 zY(gwt!!~C-+2kss|5KzFlMGCqSoc9;f_(bAE`4Bp&k$Rw(&I!56gS8&dcI4?p2E0-Cu=Dka(^_DSp) X5(fk?<_|7Lx_=|2@9SXw9PR%A{W*Cv delta 590 zcmZ8dJ5v*36g^+EyZ6hofw-`S6@lObLUuz0ag`|Y>YPz$+=5Bxj$xQ66CEBFHZ=C? zWQLB0#uf{s@Y_)#^io^@d@)Qzyvq+>jd%)mFg z5YIg9Lc2M-o1w*2WMw1q#IsKDSo%_SDm9QwIdQ{s^Ko7KI`nm4G8Y!?zN8(vgVga; zv7YBKp*P=(`gndCxI<}=po_vO$ISE=iI7JE&OHJL6MU30ge4whmB)C%Xp^US#r@u} o{5@kwxP)Vjk-_@RIX0jLV}i?qalwROQYl{S51#NYrCy_{e=*`$W&i*H diff --git a/src/SeniorQuestionGenerator.java b/src/SeniorQuestionGenerator.java index 0444394..28e076a 100644 --- a/src/SeniorQuestionGenerator.java +++ b/src/SeniorQuestionGenerator.java @@ -7,20 +7,37 @@ import java.util.Random; public class SeniorQuestionGenerator implements QuestionGenerator { @Override public String generateQuestion(StringBuilder question, Random random) { - // 确保所有高中题目都包含至少一个sin、cos或tan的运算符 - String[] functions = {"sin(", "cos(", "tan("}; - String func = functions[random.nextInt(functions.length)]; - int angle = random.nextInt(100)+1; - - question.append(func).append(angle).append(")"); + // 随机生成1-5个操作数 + int operandCount = random.nextInt(5) + 1; + String[] operators = {"+", "-", "*", "/"}; + + // 确定包含三角函数的操作数位置 + int trigPosition = random.nextInt(operandCount); + + // 生成所有操作数 + for (int i = 0; i < operandCount; i++) { + if (i == trigPosition) { + // 三角函数操作数 + String[] trigFunctions = {"sin", "cos", "tan"}; + String function = trigFunctions[random.nextInt(trigFunctions.length)]; + int num = random.nextInt(100) + 1; + question.append(function).append("(").append(num).append(")"); + } else { + // 普通操作数 + int num = random.nextInt(100) + 1; + question.append(num); + } + + // 添加运算符(除了最后一个操作数) + if (i < operandCount - 1) { + String op = operators[random.nextInt(operators.length)]; + question.append(" " + op + " "); + } + } - // 添加一些其他运算符使题目更复杂 - int complexity = random.nextInt(3); - for (int i = 0; i < complexity; i++) { - String[] operators = {"+", "-", "*", "/"}; - String op = operators[random.nextInt(operators.length)]; - int num = random.nextInt(10) + 1; - question.append(" ").append(op).append(" " ).append(num); + // 10%的概率添加外层括号(如果有多个操作数) + if (operandCount > 1 && random.nextDouble() < 0.1) { + question.insert(0, "(").append(")"); } question.append(" = ?");