Update JuniorProblem.java

pull/2/head
hnu202326010305 2 weeks ago
parent 28185d3043
commit 49ac5d1afc

@ -1,23 +1,51 @@
import java.util.Random; import java.util.Random;
public class JuniorProblem implements ProblemsGenerator{ public class JuniorProblem implements ProblemsGenerator {
private static final Random RANDOM = new Random(); private static final Random RANDOM = new Random();
private static final String[] OPERATORS = {"+", "-", "*", "/"};
@Override private static final String[] POW_OPERATORS = {"√", "^2"};
public String generate() {
int count = RANDOM.nextInt(5) + 1; // 1~5个数 @Override
StringBuilder sb = new StringBuilder(); public String generate() {
for (int i = 0; i < count; i++) { String primaryExpr = generatePrimaryExpression();
int num = RANDOM.nextInt(20) + 1; return addPowerOperators(primaryExpr);
if (RANDOM.nextBoolean()) { }
sb.append(num).append("^2");
} else { private String generatePrimaryExpression() {
sb.append("√").append(num); int count = RANDOM.nextInt(4) + 2;
} StringBuilder sb = new StringBuilder();
if (i < count - 1) {
sb.append(" + "); for (int i = 0; i < count; i++) {
} sb.append(RANDOM.nextInt(100) + 1);
} if (i < count - 1) {
return sb.toString(); 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);
}
} }
Loading…
Cancel
Save