public class 四则运算 {
public static String str = "";//保存题目的字符串
public static int num = 5;//每题中数的个数
public static int num_i = 0;//题目中已有数的个数
public static int numberRange = 100;//运算中数的最大取值
public static double sum = 0;//记录结果
public static void main(String[] args) {
for (int i = 0; i < 50; i++) {
GetQuestion();
System.out.print(i+1);
System.out.print(". " + str + " ");
System.out.print(sum);
System.out.print(" ");
System.out.println();
}
}
public static double jisuan(double sum,char fu[],int w,int t){
if(fu[(int)(Math.random()*4)]=='+'){
sum+=w;
}
if(fu[(int)(Math.random()*4)]=='-'){
if(t>50){
sum+=w;
}else{
w-=sum;
}
}
if(fu[(int)(Math.random()*4)]=='*'){
sum*=w;
}
if(fu[(int)(Math.random()*4)]=='/'){
if(t>50){
sum/=w;
}else{
w/=sum;
}
}
return sum;
}
private static void GetQuestion() {
//得到问题函数,在这里调用递归函数quesGrow()。
str = "";
sum=0;
num_i = num;//用前都清零
quesGrow();
}
private static void quesGrow() {
char fu[]={'+','-','*','/'};
//
if( num_i > 1 ) {
int j = num_i;//记录这是第几层调用。
num_i--;
quesGrow();//递归
int w=1+(int)(Math.random()*numberRange);//随机生成一个数
int t=1+(int)(Math.random()*100);//向左生成,还是向右生成,类似于树。
int f=1+(int)(Math.random()*100);//运算符控制
if(t>50)//新数往右加
{
if(f>50) {
sum=jisuan(sum,fu,w,t);
str = str + fu[(int)(Math.random()*4)] + String.valueOf( w );
}
else {
sum=jisuan(sum,fu,w,t);
str = str + fu[(int)(Math.random()*4)] + String.valueOf( w );
}
}
else//否则 新数往左加
{
if(f>50) {
sum=jisuan(sum,fu,w,t);
str = String.valueOf( w ) + fu[(int)(Math.random()*4)] + str;
}
else {
if( j < 3 ) {//3——摸索出的数,不用给自己套上括号。实际上就是j=2
sum=jisuan(sum,fu,w,t);
str = String.valueOf( w ) + fu[(int)(Math.random()*4)] + str;
}
else {
sum=jisuan(sum,fu,w,t);
str = String.valueOf( w ) + fu[(int)(Math.random()*4)] + "(" +str+ ")";
}
}
}
}
else if( num_i == 1 ) {
//最后一层,也是输出的第一层
int w=1+(int)(Math.random()*numberRange);
str = str + String.valueOf( w );
}
}
}