import java.util.List; import java.util.Random; /** * 生成高中题目 */ public class SeniorProblem implements ProblemsGenerator { private static final Random RANDOM = new Random(); private final BracketManager bracketManager = new BracketManager(); private final PowerManager powerManager = new PowerManager(); private final TrigManager trigManager = new TrigManager(); private final ExpressionBuilder expressionBuilder = new ExpressionBuilder(); @Override public String generate() { String expression; boolean hasTrig; do { int numCount = RANDOM.nextInt(5) + 1; expression = expressionBuilder.generateBasicExpression(numCount); List numPositions = expressionBuilder.getNumberPositions(expression); if (RANDOM.nextDouble() < 0.8) { int pairs = bracketManager.decideParenthesesPairs(numCount); if (pairs > 0) { expression = bracketManager.addParentheses(expression, pairs, numPositions); } } // 添加三角函数并检查是否存在 expression = trigManager.addTrigOperations(expression, numPositions); List trigPositions = expressionBuilder.getNumberPositions(expression); hasTrig = expression.contains("sin") || expression.contains("cos") || expression.contains("tan"); // 40% 概率加幂运算,避免与 trig 重叠 if (RANDOM.nextDouble() < 0.4) { expression = powerManager.addPowerOperationsAvoid(expression, numPositions, trigPositions); } } while (expressionBuilder.hasDivideByZero(expression) || !hasTrig); return expression; } }