zoukankan      html  css  js  c++  java
  • 四则运算三

    一.

    1、定义参数控制生成题目的个数。 例如,参数n=10;则将生成10个题目。 2、定义参数控制题目中数值(自然数、真分数和真分数分母)的范围。 例如参数r= 10,将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。 该参数必须给定,否则程序报错并给出帮助信息。3.程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目 例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。4.

    二.

        我重新将程序写了一遍,为了将自己的思路理的更加清晰一些。前面不变利用while循环,在进行选项之后,引用后面的方法。在整数方法中,定义了一个d1,d1是式子运行的结果,然后在后面定义一个值z,当z与d1进行比较之后,如果值一样就会输出结果正确,如果结果错误,在输出结果错误语句之后,同时会输出正确答案,对于分数的方法,我定义了一个值Z和M,分别代表分数同分过后的分子和分母,剩下的基本和整数的方法一样。

    三.

    import java.util.Scanner;
    
    public class suanshu3 {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int m=0;
            while(m==0)
            {
                System.out.println("1、整数计算式,2、真分数计算式");
                int a1 = input.nextInt();
                if(a1==1)
                {
                    zhengshu(a1);
                }
                else
                {
                    fenshu(a1);
                }
            }
        }
        public static void fenshu(int a1) {
             int x,y,i,a2,C;//a代表计算类型,x代表题目数量,y代表数值的范围,i为循环变量,d代表是否有乘除法
             int M,Z;
             int h = 0;
             String d = null;
             System.out.println("请输入题目的数量");
             Scanner input2=new Scanner(System.in);
             x=input2.nextInt();
             String daan[]=new String [x];
             int x1,x2,B,m1,m2;
             System.out.println("请输入分母数值的范围");
             B=input2.nextInt();
             System.out.println("是否有乘除法?(是输入1,否则输入0)");
             C=input2.nextInt();
             if(C==1){
                 for(i=0;i<x;i++){
                     m1=1+(int)(Math.random()*B);//随机生成一个小于B的分母
                     x1=1+(int)(Math.random()*m1);//生成一个比分母小的分子,实现真分数
                     m2=1+(int)(Math.random()*B);//随机生成一个小于B的分母
                     x2=1+(int)(Math.random()*m2);//生成一个比分母小的分子,实现真分数
                     int c=(int)(Math.random()*3);//生成运算符
                     if(c==0)
                     {
                         Z=x1*m2+x2*m1;
                         M=m1*m2; 
                         System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"=       ");
                         Scanner e1 = new Scanner(System.in);
                         System.out.println("分子:");
                         int z = e1.nextInt();
                         System.out.println("分母:");
                         int m = e1.nextInt();
                         if(z==Z&&m==M){
                             System.out.println("回答正确!");
                             h++;
                         }else{
                             System.out.println("回答错误!正确答案是"+Z+"/"+M);
                         }
                     }
                     if(c==1)
                     {
                         Z=x1*m2-x2*m1;
                         M=m1*m2;
                         System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"=       ");
                         Scanner e1 = new Scanner(System.in);
                         System.out.println("分子:");
                         int z = e1.nextInt();
                         System.out.println("分母:");
                         int m = e1.nextInt();
                         if(z==Z&&m==M){
                             System.out.println("回答正确!");
                             h++;
                         }else{
                             System.out.println("回答错误!正确答案是"+Z+"/"+M);
                         }
                     }
                     if(c==2)
                     {
                         Z=x1*x2;
                         M=m1*m2;
                         System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"=       ");
                         Scanner e1 = new Scanner(System.in);
                         System.out.println("分子:");
                         int z = e1.nextInt();
                         System.out.println("分母:");
                         int m = e1.nextInt();
                         if(z==Z&&m==M){
                             System.out.println("回答正确!");
                             h++;
                         }else{
                             System.out.println("回答错误!正确答案是"+Z+"/"+M);
                         }
                     }
                     if(c==3)
                     {
                         Z=m1*x2;
                         M=m2*x1;
                         System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"=       ");
                         Scanner e1 = new Scanner(System.in);
                         System.out.println("分子:");
                         int z = e1.nextInt();
                         System.out.println("分母:");
                         int m = e1.nextInt();
                         if(z==Z&&m==M){
                             System.out.println("回答正确!");
                             h++;
                         }else{
                             System.out.println("回答错误!正确答案是"+Z+"/"+M);
                         }
                     }
                     if((i+1)%3==0)
                     {
                         System.out.println();
                     }
                     daan[i]=d;
                      
                 }
             }
             if(C==0)
             {
                 for(i=0;i<x;i++){
                     m1=1+(int)(Math.random()*B);//随机生成一个小于B的分母
                     x1=1+(int)(Math.random()*m1);//生成一个比分母小的分子,实现真分数
                     m2=1+(int)(Math.random()*B);//随机生成一个小于B的分母
                     x2=1+(int)(Math.random()*m2);//生成一个比分母小的分子,实现真分数
                     int c=(int)(Math.random()*2);//生成运算符
                     if(c==0)
                     {
                         Z=x1*m2+x2*m1;
                         M=m1*m2; 
                         System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"=       ");
                         Scanner e1 = new Scanner(System.in);
                         System.out.println("分子:");
                         int z = e1.nextInt();
                         System.out.println("分母:");
                         int m = e1.nextInt();
                         if(z==Z&&m==M){
                             System.out.println("回答正确!");
                             h++;
                         }else{
                             System.out.println("回答错误!正确答案是"+Z+"/"+M);
                         }
                     }
                     if(c==1)
                     {
                         Z=x1*m2-x2*m1;
                         M=m1*m2;
                         System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"=       ");
                         Scanner e1 = new Scanner(System.in);
                         System.out.println("分子:");
                         int z = e1.nextInt();
                         System.out.println("分母:");
                         int m = e1.nextInt();
                         if(z==Z&&m==M){
                             System.out.println("回答正确!");
                             h++;
                         }else{
                             System.out.println("回答错误!正确答案是"+Z+"/"+M);
                         }
                     }
                     if((i+1)%3==0)
                     {
                         System.out.println();
                     }
                     daan[i]=d;
                      
                 }
             }
        }
        public static void zhengshu(int a1) {//整数
            int x,y,i,a2,C;//a代表计算类型,x代表题目数量,y代表数值的范围,i为循环变量,d代表是否有乘除法
            int d1=0;
            String d = null;//d用来储存答案
            System.out.println("请输入题目的数量");
            Scanner input2=new Scanner(System.in);
            x=input2.nextInt();
            int daan[]=new int [x];
            System.out.println("请输入数值的范围");
            y=input2.nextInt();
            System.out.println("是否有乘除法?(是输入1,否则输入0)");
            C=input2.nextInt();
            if(C==1)
            {
                for(i=0;i<x;i++){
                    int a=(int)(Math.random()*y);//随机生成一个1-10的整数
                    int b=(int)(Math.random()*y);//随机生成一个1-10的整数
                    int c=(int)(Math.random()*3);//随机生成一个1-4的整数,0表示加法,1表示减法,2表示乘法,3表示除法
                    if(c==0)
                    {
                        d1=a+b;
                        y = a + b;
                        System.out.printf(a+"+"+b+"= ");
                        Scanner e1 = new Scanner(System.in);
                        int z = e1.nextInt();
                        if(z==y){
                            System.out.println("回答正确!");
                            d1++;
                        }else{
                            System.out.println("回答错误!正确答案是"+y);
                        }
                    }
                    if(c==1)
                    {
                        d1=a-b;
                        y = a - b;
                        System.out.printf(a+"-"+b+"= ");
                        Scanner e1 = new Scanner(System.in);
                        int z = e1.nextInt();
                        if(z==y){
                            System.out.println("回答正确!");
                            d1++;
                        }else{
                            System.out.println("回答错误!正确答案是"+y);
                        }
                    }
                    if(c==2)
                    {
                        d1=a*b;
                        y = a * b;
                        System.out.printf(a+"*"+b+"= ");
                        Scanner e1 = new Scanner(System.in);
                        int z = e1.nextInt();
                        if(z==y){
                            System.out.println("回答正确!");
                            d1++;
                        }else{
                            System.out.println("回答错误!正确答案是"+y);
                        }
                    }
                    if(c==3)
                    {
                        d1=a/b;
                        y = a / b;
                        System.out.printf(a+"+"+b+"= ");
                        Scanner e1 = new Scanner(System.in);
                        int z = e1.nextInt();
                        if(z==y){
                            System.out.println("回答正确!");
                            d1++;
                        }else{
                            System.out.println("回答错误!正确答案是"+y);
                        }
                    }
                    if((i+1)%3==0){
                        System.out.println();
                    }
                    daan[i]=d1;
                }
                 
            }
            else
            {
                    for(i=0;i<x;i++)
                    {
                        int a=(int)(Math.random()*y);//随机生成一个1-的整数
                        int b=(int)(Math.random()*y);//随机生成一个1-10的整数
                        int c=(int)(Math.random()*2);//随机生成一个1-4的整数,0表示加法,1表示减法
                        if(c==0)
                        {
                            d1=a+b;
                            y = a + b;
                            System.out.printf(a+"+"+b+"= ");
                            Scanner e1 = new Scanner(System.in);
                            int z = e1.nextInt();
                            if(z==y){
                                System.out.println("回答正确!");
                                d1++;
                            }else{
                                System.out.println("回答错误!正确答案是"+y);
                            }
                        }
                        if(c==1)
                        {
                            d1=a-b;
                            y = a - b;
                            System.out.printf(a+"-"+b+"= ");
                            Scanner e1 = new Scanner(System.in);
                            int z = e1.nextInt();
                            if(z==y){
                                System.out.println("回答正确!");
                                d1++;
                            }else{
                                System.out.println("回答错误!正确答案是"+y);
                            }
                        }
                        if((i+1)%3==0){
                            System.out.println();
                        }
                        daan[i]=d1;
                    }
                    
                
            }
        }
    }

    四.

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/gong123/p/6566808.html
Copyright © 2011-2022 走看看