From 49ac5d1afcf772f2563c16c67aabb33b32ff2ad9 Mon Sep 17 00:00:00 2001 From: hnu202326010305 <1405671544@qq.com> Date: Sat, 27 Sep 2025 03:09:16 +0800 Subject: [PATCH] Update JuniorProblem.java --- src/JuniorProblem.java | 72 +++++++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/src/JuniorProblem.java b/src/JuniorProblem.java index 8933d87..7ef49b1 100644 --- a/src/JuniorProblem.java +++ b/src/JuniorProblem.java @@ -1,23 +1,51 @@ -import java.util.Random; - -public class JuniorProblem implements ProblemsGenerator{ - private static final Random RANDOM = new Random(); - - @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(20) + 1; - if (RANDOM.nextBoolean()) { - sb.append(num).append("^2"); - } else { - sb.append("√").append(num); - } - if (i < count - 1) { - sb.append(" + "); - } - } - return sb.toString(); - } +import java.util.Random; + +public class JuniorProblem implements ProblemsGenerator { + private static final Random RANDOM = new Random(); + private static final String[] OPERATORS = {"+", "-", "*", "/"}; + private static final String[] POW_OPERATORS = {"√", "^2"}; + + @Override + public String generate() { + String primaryExpr = generatePrimaryExpression(); + return addPowerOperators(primaryExpr); + } + + private String generatePrimaryExpression() { + int count = RANDOM.nextInt(4) + 2; + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < count; i++) { + sb.append(RANDOM.nextInt(100) + 1); + if (i < count - 1) { + sb.append(" ").append(OPERATORS[RANDOM.nextInt(OPERATORS.length)]).append(" "); + } + } + return sb.toString(); + } + + private String addPowerOperators(String expr) { + String[] parts = expr.split(" "); + boolean hasPower = false; + + for (int i = 0; i < parts.length; i++) { + if (parts[i].matches("\\d+") && (!hasPower || RANDOM.nextBoolean())) { + String op = POW_OPERATORS[RANDOM.nextInt(POW_OPERATORS.length)]; + parts[i] = op.equals("√") ? "√" + parts[i] : parts[i] + "^2"; + hasPower = true; + } + } + + if (!hasPower) { + for (int i = 0; i < parts.length; i++) { + if (parts[i].matches("\\d+")) { + String op = POW_OPERATORS[RANDOM.nextInt(POW_OPERATORS.length)]; + parts[i] = op.equals("√") ? "√" + parts[i] : parts[i] + "^2"; + break; + } + } + } + + return String.join(" ", parts); + } } \ No newline at end of file