zoukankan      html  css  js  c++  java
  • 四则混合运算3

      1 // 组内成员    魏垚    唐炳辉      
      2 import java.util.Scanner;
      3 
      4 public class Zishuzu {
      5     
      6     static Scanner in=new Scanner(System.in);
      7     
      8     public static void main(String[] args) {
      9         // TODO Auto-generated method stub
     10         
     11         System.out.print("请选择:
    1.混合运算;
    2.简单运算。
    ");
     12         int k=in.nextInt();
     13         System.out.print("请选择:
    计算范围:
    ");
     14         int numF=in.nextInt();                             //numF:计算范围
     15         System.out.print("2.请选择是否有乘除法:
    ");
     16         System.out.print("(1):是            (2):否
    ");
     17         int ccYN=in.nextInt();                             //ccYN:是否有乘除法                
     18         if(k==1)
     19         {
     20             operationComp(numF,ccYN);
     21         }
     22         else if(k==2)
     23         {
     24             operationInt(numF,ccYN);
     25         }
     26     }
     27     
     28     //简单运算
     29     public static void operationInt(int a1,int a2)
     30     {                               //计算范围   乘除法   负数
     31         int a4=5;//打印数量
     32         int fir[]=new int[a4];//第一个数
     33         int mid[]=new int[a4]; //符号转化的中间变量
     34         char fh[]=new char[a4];//符号
     35         int sec[]=new int[a4];//第二个数
     36         
     37         int T;//控制重新生成随机数的变量
     38 
     39         for(int i=0;i<a4;i++)
     40         {
     41             T=0;
     42             
     43             //随机产生
     44             fir[i]=(int)(Math.random()*a1);
     45             mid[i]=(int)(Math.random()*a1);
     46             if(a2==2)
     47             {
     48                 mid[i]=mid[i]%2;
     49                 if(mid[i]==0)fh[i]='+';
     50                 if(mid[i]==1)fh[i]='-';
     51             }
     52             if(a2==1)
     53             {
     54                 mid[i]=mid[i]%4;
     55                 if(mid[i]==0)fh[i]='+';
     56                 if(mid[i]==1)fh[i]='-';
     57                 if(mid[i]==2)fh[i]='*';
     58                 if(mid[i]==3)fh[i]='/';
     59             }
     60             sec[i]=(int)(Math.random()*a1);
     61             if(fh[i]=='/')
     62             {
     63                 while(sec[i]==0)
     64                 {
     65                     sec[i]=(int)(Math.random()*a1);
     66                 }
     67                 if(fir[i]%sec[i]!=0)
     68                 {
     69                     T=1;
     70                 }
     71             }
     72             
     73             //是否重复
     74             for(int j=i-1;j>=0;j--)
     75             {
     76                 if(fh[i]==fh[j])
     77                 {
     78                     //判断数字有无相同
     79                     if(fir[i]==fir[j]&&sec[i]==sec[j])
     80                         T=1;
     81                     //加法与乘法前后数字也不能都相同
     82                     if(fh[i]=='+'||fh[i]=='/')
     83                     {
     84                         if(fir[i]==sec[j]&&sec[i]==fir[j])
     85                             T=1;
     86                     }    
     87                 }
     88             }
     89             if(T==1)i--;
     90         }
     91         
     92         //打印
     93         int R=0;
     94         for(int m=0;m<a4;m++)
     95         {
     96             System.out.print(fir[m]);
     97             System.out.print(fh[m]);
     98             System.out.print(sec[m]);
     99             System.out.print("=");
    100             int r1=in.nextInt();
    101             int r2=0;
    102             
    103             if(fh[m]=='+')
    104             {
    105                 r2=fir[m]+sec[m];
    106             }
    107             if(fh[m]=='-')
    108             {
    109                 r2=fir[m]-sec[m];
    110             }
    111             if(fh[m]=='*')
    112             {
    113                 r2=fir[m]*sec[m];
    114             }
    115             if(fh[m]=='/')
    116             {
    117                 r2=fir[m]/sec[m];
    118             }
    119             if(r1==r2)
    120                 R++;        
    121         }
    122         System.out.print("正确题目个数:"+R);
    123     }
    124     
    125     //混合运算
    126     public static void operationComp(int b1,int b2)
    127     {                               //计算范围   乘除法   负数
    128 //        int b4=5;//打印数量
    129         int num[]=new int[5];       //混合运算的数字部分
    130         char fuh[]=new char[4];     //混合运算的符号部分
    131         int mid1;                   //符号中间转换变量
    132         System.out.print("请输入混合运算复杂度:
    ");
    133         int numope=in.nextInt();
    134         int R=0;//统计计算正确题目个数
    135         for(int k=0;k<5;k++)
    136         {
    137             for(int j=0;j<4;j++)
    138             {
    139                 mid1=(int)(Math.random()*100);
    140                 if(b2==1)                        //有无乘除法
    141                 {
    142                     if(mid1%4==0)
    143                         fuh[j]='+';
    144                     if(mid1%4==1)
    145                         fuh[j]='-';
    146                     if(mid1%4==2)
    147                         fuh[j]='*';
    148                     if(mid1%4==3)
    149                         fuh[j]='/';
    150                 }
    151                 if(b2==2)
    152                 {
    153                     if(mid1%2==0)
    154                         fuh[j]='+';
    155                     if(mid1%2==1)
    156                         fuh[j]='-';
    157                 }
    158             }
    159             for(int i=0;i<5;i++)
    160             {
    161                 num[i]=(int)(Math.random()*b1);
    162                 if(i>0)
    163                 {
    164                     if(fuh[i-1]=='/')
    165                     {
    166                         while(num[i]==0)
    167                         {
    168                             num[i]=(int)(Math.random()*b1);//除号后不能有0
    169                         }
    170                         if(num[i-1]%num[i]!=0)
    171                         {
    172                             i=i-2;
    173                         }
    174                     }
    175                 }
    176             }
    177             
    178             //打印
    179             int N=0;
    180             for(int n=0;n<numope-1;n++)
    181             {
    182                 System.out.print(num[n]);
    183                 System.out.print(fuh[n]);                
    184                 N++;
    185             }
    186             System.out.print(num[N]);
    187             System.out.print("=
    ");
    188             
    189             //计算        
    190             for(int js=0;js<numope-1;js++)
    191             {
    192                 if(fuh[js]=='*'||fuh[js]=='/')
    193                 {
    194                     if(fuh[js]=='*')
    195                         num[js+1]=num[js]*num[js+1];
    196                     if(fuh[js]=='/')
    197                         num[js+1]=num[js]/num[js+1];
    198                     num[js]=0;
    199                     if(js>0)
    200                         fuh[js]=fuh[js-1];
    201                     if(js==0)
    202                         fuh[js]='+';
    203 
    204                 }
    205             }
    206             
    207             for(int js1=0;js1<numope-1;js1++)
    208             {
    209                 if(fuh[js1]=='+')
    210                     num[js1+1]=num[js1]+num[js1+1];
    211                 if(fuh[js1]=='-')
    212                     num[js1+1]=num[js1]-num[js1+1];
    213             }
    214 
    215             int innum=in.nextInt();
    216             if(innum==num[numope-1])
    217                 R++;
    218         }
    219         System.out.print("正确题目个数:"+R);    
    220     }
    221 }

    设计思路:

       

    1.通过一些变量,来控制功能的实现分别实现简单运算与混合运算。

    2.先定义四个数组,分别储存计算式的第一个数字、符号转化中间变量,符号和第二个数字。然后随机产生变量,在此过程中,需要先判断是否有乘除法,最后将产生的随机数储存在数组中。在随机生成后,开始依次判断,设置变量T,当有一方不满足题意,改变T的值,从而使这组随机数重新生成。然后判断除法是否有余数,所有计算式是否有重复,在判断计算式是否有重复时,需要考虑到加法与乘法的特殊性。接下来就是打印,利用循环,在输出算式后,要做一个计算算式结果的过程,判断符号然后对第一和第二个数做处理就行了,然后判断客户输入是否和正确结果相同,相同时,变量R递加,最后输出R,即为正确个数;

    3.要实现混合运算,先定义两个数组,一个储存混合运算的数字,一个储存混合运算的字符,然后输出时,一个数字,一个字符的输出,这样就构成了一个混合运算式。在随机对两数组赋值时,要考虑到除号后边的数字不能为0,切除号前后数字相除后不能有余。计算时,先要依次判断是否有乘除号,有的话先计算乘除号前后的数字,然后将结果赋值给符号后的数字,赋值符号前的数字为0,两个数字之间的符号赋给前一个符号,最后只剩下加减法时,还是按章刚才的原理以此计算将结果赋给后一个数,最后结果即为数组最后一个,同理判断客户输入是否和正确结果相同,相同时,变量R递加,最后输出R,即为正确个数。

    截图:

  • 相关阅读:
    struts2中token防止重复提交表单
    有关于kali linux安装eclipse出现的一系列问题
    Kali-linux安装之后的简单设置
    kail新手安装
    画图解释 SQL join 语句
    struts2中利用POI导出Excel文档并下载
    eclipse jetty插件安装(离线版)
    web安全浅析
    maven项目配置Jetty服务器
    js、javascript正则表达式验证身份证号码
  • 原文地址:https://www.cnblogs.com/sanzangtdashi/p/5355755.html
Copyright © 2011-2022 走看看