生成四则运算所用方法类似生成二叉树的方法递归添加。直接上代码!
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 ); } }}
生成二元一次方程感觉比上面一个简单~因为并没有把生成的方程组的解算出来~上代码
public class 二元一次方程 { private static String str=""; public static void main(String[] args) { int num=2;int j=1; for(int i=1;i<51;i++){ T(); if(num==2){ System.out.println(j+"."); j++; num=0; } System.out.println("y"+"="+str); num++; } } public static void T(){ str=""; char fu[]={'+','-','*','/'}; int w=(int)(Math.random()*100); char c= fu[(int)(Math.random()*4)]; str="x"+c+String.valueOf(w); if(c=='*'||c=='/'){ while(true){ char b=fu[(int)(Math.random()*4)]; if(b=='+'||b=='-'){ str=str+b+String.valueOf((int)(Math.random()*100)); break; } } } if(c=='+'||c=='-'){ while(true){ char b=fu[(int)(Math.random()*4)]; if(b=='*'||b=='/'){ str='('+str+')'+b+String.valueOf((int)(Math.random()*100)); break; } } } }}