四则混合运算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,即为正确个数。

截图:

原文地址:https://www.cnblogs.com/sanzangtdashi/p/5355755.html