From 3d016d0eec4415a7c9828d2bb1ede4281fb23588 Mon Sep 17 00:00:00 2001 From: hnu202326010305 <1405671544@qq.com> Date: Sat, 27 Sep 2025 03:09:37 +0800 Subject: [PATCH] Update PrimaryProblem.java --- src/PrimaryProblem.java | 62 ++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/src/PrimaryProblem.java b/src/PrimaryProblem.java index 4b5e693..36601e7 100644 --- a/src/PrimaryProblem.java +++ b/src/PrimaryProblem.java @@ -1,20 +1,44 @@ -import java.util.Random; - -public class PrimaryProblem implements ProblemsGenerator { - private static final Random RANDOM = new Random(); - private static final char[] OPS = {'+', '-', '*', '/'}; - - @Override - public String generate() { - int count = RANDOM.nextInt(5) + 1; // 1~5个数 - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < count; i++) { - int num = RANDOM.nextInt(100) + 1; - sb.append(num); - if (i < count - 1) { - sb.append(" ").append(OPS[RANDOM.nextInt(OPS.length)]).append(" "); - } - } - return sb.toString(); - } +import java.util.Random; + +public class PrimaryProblem implements ProblemsGenerator { + private static final Random RANDOM = new Random(); + private static final String[] OPERATORS = {"+", "-", "*", "/"}; + + @Override + public String generate() { + int count = RANDOM.nextInt(4) + 2; + StringBuilder sb = new StringBuilder(); + + boolean addParentheses = count >= 3 && RANDOM.nextDouble() < 0.5; + if (addParentheses) { + int parenCount = RANDOM.nextInt(count - 2) + 2; + int startPos = RANDOM.nextInt(count - parenCount + 1); + + for (int i = 0; i < count; i++) { + if (i == startPos) { + sb.append("( "); + } + + int num = RANDOM.nextInt(100) + 1; + sb.append(num); + + if (i == startPos + parenCount - 1) { + sb.append(" )"); + } + + if (i < count - 1) { + sb.append(" ").append(OPERATORS[RANDOM.nextInt(OPERATORS.length)]).append(" "); + } + } + } else { + for (int i = 0; i < count; i++) { + int num = RANDOM.nextInt(100) + 1; + sb.append(num); + if (i < count - 1) { + sb.append(" ").append(OPERATORS[RANDOM.nextInt(OPERATORS.length)]).append(" "); + } + } + } + return sb.toString(); + } } \ No newline at end of file