From c9026aace342fd6431c58c2e45384b10f08491a0 Mon Sep 17 00:00:00 2001 From: hnu202326010302 <1677625723@qq.com> Date: Fri, 26 Sep 2025 19:40:03 +0800 Subject: [PATCH] ADD file via upload --- src/Highproblem.java | 124 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 src/Highproblem.java diff --git a/src/Highproblem.java b/src/Highproblem.java new file mode 100644 index 0000000..7f1e82c --- /dev/null +++ b/src/Highproblem.java @@ -0,0 +1,124 @@ +import java.util.Random; +import java.util.Scanner; + +public class Highproblem implements Makeproblem{ + private static Random random = new Random(); + static int basic=1; + String name="1"; + String time="1"; + int num=1; + public static void main(String[] args) { + for (int i = 0; i < 15; i++) { + basic=1; + Highproblem h1 = new Highproblem(); + System.out.println((i + 1) + ". " + h1.generateSmartExpression()); + } + } + void start(int num,String username){ + name=username; + Timemanage t1=new Timemanage(); + time=t1.timeget(); + for (int i = 0; i < num; i++) { + basic=1; + System.out.println((i + 1) + ". " + generateSmartExpression()); + System.out.println(""); + } + } + @Override + public String generateSmartExpression() { + int operatorCount = random.nextInt(3) + 1; + int b2=random.nextInt(operatorCount) + 1; + String file=time; + String result; + while(true){ + int flag=0; + result=buildExpression(operatorCount,b2); + filemanage f1=new filemanage(); + f1.fileread(name); + f1.fileread(name); + for(String i:f1.array){ + String[] parts = i.split("\\.", 2); + String j = parts.length > 1 ? parts[1] : i; + if(result.equals(j)){ + flag=1; + } + } + if(flag==1){ + continue; + } + f1.filecreate(name,file); + f1.filewrite(name,file,num+"."+result); + f1.filewrite(name,file," "); + num++; + break; + } + return result; + } + @Override + public String buildExpression(int operatorCount,int b2) { + if (operatorCount == 1) { + return generateSimpleExpression(b2); + } + + // 随机决定分割点来添加括号 + int splitPoint = random.nextInt(operatorCount - 1) + 1; + + String leftPart = (splitPoint > 1 && random.nextBoolean()) ? + "(" + buildExpression(splitPoint,b2) + ")" : + buildExpression(splitPoint,b2); + + String rightPart = (operatorCount - splitPoint > 1 && random.nextBoolean()) ? + "(" + buildExpression(operatorCount - splitPoint,b2) + ")" : + buildExpression(operatorCount - splitPoint,b2); + + char operator = getRandomOperator("+-*/"); + return leftPart + " " + operator + " " + rightPart; + } + @Override + public String generateSimpleExpression(int b2) { + int a = random.nextInt(100) + 1; + int b = random.nextInt(100) + 1; + char op = getRandomOperator("+-*/√²123"); + if(basic==b2){ + op = getRandomOperator("123"); + if(op=='1'){ + basic=0; + return "sin"+b+"°"; + }else if(op=='2'){ + basic=0; + return "cos"+b+"°"; + }else if(op=='3'){ + basic=0; + return "tan"+b+"°"; + } + }else { + basic++; + } + if(random.nextInt(2)==0){ + return a+""; + } + if(op=='√'){ + return op +""+b; + }else if(op=='1'){ + return "sin"+b+"°"; + }else if(op=='2'){ + return "cos"+b+"°"; + }else if(op=='3'){ + return "tan"+b+"°"; + } + else if(op=='²'){ + return a+""+ op ; + }else{ + if(random.nextBoolean()){ + return a + " " + op + " " + b; + }else + { + return "("+a + " " + op + " " + b+")"; + } + } + } + @Override + public char getRandomOperator(String operators) { + return operators.charAt(random.nextInt(operators.length())); + } +}