作业二:生成四则运算和二元一次方程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业二:生成四则运算和二元一次方程相关的知识,希望对你有一定的参考价值。

生成四则运算所用方法类似生成二叉树的方法递归添加。直接上代码!

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;
                }
            }
        }
    }
}

 技术分享

以上是关于作业二:生成四则运算和二元一次方程的主要内容,如果未能解决你的问题,请参考以下文章

第一次作业-自动生成四则运算的题目

软件工程第一次作业

第一次作业:四则运算

第一次作业-四则运算题目生成程序

第一次作业-四则运算题目生成程序

第一次作业--二年级四则运算