import java.util.Scanner;
public class Yunsuan {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int t=1,n=0;
while(t!=0)
{
System.out.println("请选择: 1.整数运算 2.分数运算 0.退出");
t=sc.nextInt();
switch(t)
{
case 1:{zhengshu();
break;
}
case 2:{fenshu();
break;
}
}
}
}
//化简分数;求最大公约数
public static int simple(int a,int b)
{
int c=0;
if(a>b)
{
while(a!=b)
{
c=a-b;
if(b>=c)
{
a=b;
b=c;
}
if(c>b)
{
a=c;
}
}
return a;
}
else
{
while(a!=b)
{
c=b-a;
if(a>=c)
{
b=a;
a=c;
}
if(c>a)
{
b=c;
}
}
return a;
}
}
//求最小公倍数
public static int gongbei(int a,int b)
{
int t=simple(a,b);
return a*b/t;
}
//整数运算
public static void zhengshu()
{
Scanner sc=new Scanner(System.in);
System.out.println("请输入题目数量:");
int n=sc.nextInt();
String a[]={"+","-","*","/"};
int b[]=new int [n];
int c[]=new int [n];
int d[]=new int [n];
for(int i=0;i=0;j--)
{
if(b[i]==b[j]&&c[i]==c[j]&&d[i]==d[j])
{
f = true;
break;
}
}
if(f == true||(d[i]==1&&b[i]=0;j--)
{
if(b1[i]==b1[j]&&b2[i]==b2[j]&&c1[i]==c1[j]&&c2[i]==c2[j]&&d[i]==d[j])//查重
{
f=true;
break;
}
}
if(f==true||(b1[i]>=b2[i])||(c1[i]>=c2[i])||(b2[i]==0)||(c2[i]==0)||(b1[i]==0)||(c1[i]==0))//分子大于分母,都不为0
{
i--;
}
else
{
int t1=simple(b1[i],b2[i]);
int t2=simple(c1[i],c2[i]);
b1[i] /= t1; //都化为最简
b2[i] /= t1;
c1[i] /= t2;
c2[i] /= t2;
int t=gongbei(b2[i],c2[i]); //最小公倍数
int y1=t/b2[i]; //最小公倍数除以分母
int y2=t/c2[i];
b1[i]*=y1; //同分后的分子
c1[i]*=y2; //同分后的分子
int p1=b1[i]+c1[i];
int p2=b1[i]-c1[i];
if(d[i]==0&&p1>=t)
{
i--;
continue;
}
else if(d[i]==1&&p2<=0)
{
i--;
continue;
}
else if(d[i]==2&&((b1[i]/y1)*(c1[i]/y2)>=b2[i]*c2[i])) //乘除的时候按同分前的分子,分母计算
{
i--;
continue;
}
else if(d[i]==3&&((b1[i]/y1*c2[i])>=(b2[i]*c1[i]/y2)))
{
i--;
continue;
}
else
{
System.out.print("第"+(i+1)+"题: "+"("+(b1[i]/y1)+"/"+b2[i]+")"+" "+a[d[i]]+" "+"("+(c1[i]/y2)+"/"+c2[i]+")"+" "+"=");
String q=sc.next();
if(d[i]==0)
{
int t3=simple(p1,t);
p1 /=t3;
t /=t3;
String w1=""+p1+"/"+t;
if(q.equals(w1))
System.out.println("恭喜你,回答正确!");
else
System.out.println("回答错误! 正确结果为:"+w1);
}
else if(d[i]==1)
{
int t3=simple(p2,t);
p2 /=t3;
t /=t3;
String w1=""+p2+"/"+t;
if(q.equals(w1))
System.out.println("恭喜你,回答正确!");
else
System.out.println("回答错误! 正确结果为:"+w1);
}
else if(d[i]==2)
{
b1[i] /=y1;
b1[i] *=(c1[i]/y2);
b2[i] *=c2[i];
int t3=simple(b1[i],b2[i]);
b1[i] /=t3;
b2[i] /=t3;
String w1=""+b1[i]+"/"+b2[i];
if(q.equals(w1))
System.out.println("恭喜你,回答正确!");
else
System.out.println("回答错误! 正确结果为:"+w1);
}
else if(d[i]==3)
{
b1[i] /=y1;
b1[i] *=c2[i];
b2[i] *=c1[i];
int t3=simple(b1[i],b2[i]);
b1[i] /=t3;
b2[i] /=t3;
String w1=""+b1[i]+"/"+b2[i];
if(q.equals(w1))
System.out.println("恭喜你,回答正确!");
else
System.out.println("回答错误! 正确结果为:"+w1);
}
}
}
}
}
}
设计思想
1.设置几个数组,将随机产生的100以内数存入其中,在一个数组里分别存入加减乘除,利用产生的三以内的整数,确定运算符号;
2.添加限制,将产生负数,和上面的算式相同的排除掉,重新产生随机数。
3.计算出结果,与输入的结果进行比较。
4.在计算真分数的时候,先计算出分子和分母的最大公约数,将式子化简,进行加法运算的时候,先求出两个数的分母的最小公倍数,
进行同分,让分子进行加减,由于不能有假分数,将两个分子相加大于最小公倍数的排除,重新产生随机数,由于结果也是分数形式,只能用String类型的,
将计算的结果转化成String类型,String q=“”+分子+"/"+分母;再将结果与之比较
运行截图
没按预期时间完成的主要原因是不能清楚地理解题目的意思,老是改,是不是真分数包括带分数,来回的改。
基础还是不太扎实,有时还会对逻辑关系分不清。