關於整數和真分數的四則運算的算法,整數已通過,但真分數不能化到最簡的問題求大神指導啊

#include "stdafx.h"




#include<iostream>
using namespace std;
void realfenshu(int m,int a[][2])
{
for(int p=0;p<m;p++)
{
int i=rand()%10;
int j=rand()%10+1;
if(j==0||i>j)
{
i=rand()%10;
j=(rand()-1)%10;
}
int x=rand()%10;
int y=rand()%10+1;
if(y==0||x>y)
{
x=rand()%10;
y=(rand()-1)%10;
}
int k=rand()%4;
switch(k)
{
case 0:
cout<<"("<<i<<"/"<<j<<")"<<"+"<<"("<<x<<"/"<<y<<")"<<"=";
for(int n=0;n<100;n++)
{
if((i*y+x*j)==n*(y*j))
{
a[p][0]=(i*y+x*j);
a[p][1]=(y*j);
}
else
{
if((i*y+x*j)<(y*j))
{
for(int m=1;m<(i*y+x*j);m++)
{
if((i*y+x*j)%m==0&&(y*j)%m==0)
{
a[p][0]=(i*y+x*j)/m;
a[p][1]=(y*j)/m;
}
}
}
if((i*y+x*j)>(y*j))
{
for(int m=1;m<(y*j);m++)
{
if((i*y+x*j)%m==0&&(y*j)%m==0)
{
a[p][0]=(i*y+x*j)/m;
a[p][1]=(y*j)/m;
}
}
}
}
}
break;
case 1:
cout<<"("<<i<<"/"<<j<<")"<<"-"<<"("<<x<<"/"<<y<<")"<<"=";
for(int n=0;n<100;n++)
{
if((i*y-x*j)==n*(y*j))
{
a[p][0]=(i*y-x*j);
a[p][1]=(y*j);
}
else
{
if((i*y-x*j)<(y*j)&&(i*y-x*j)>0)
{
for(int m=1;m<(i*y-x*j);m++)
{
if((i*y-x*j)%m==0&&(y*j)%m==0)
{
a[p][0]=(i*y-x*j)/m;
a[p][1]=(y*j)/m;
}
}
}
if((i*y-x*j)>(y*j))
{
for(int m=1;m<(y*j);m++)
{
if((i*y-x*j)%m==0&&(y*j)%m==0)
{
a[p][0]=(i*y-x*j)/m;
a[p][1]=(y*j)/m;
}
}
}
if((i*y-x*j)<(y*j)&&(i*y-x*j)<0)
{
for(int m=1;m<(-i*y+x*j);m++)
{
if((-i*y+x*j)%m==0&&(y*j)%m==0)
{
a[p][0]=(-i*y+x*j)/m;
a[p][1]=(y*j)/m;
}
}
}
}
}
break;
case 2:
cout<<"("<<i<<"/"<<j<<")"<<"*"<<"("<<x<<"/"<<y<<")"<<"=";
for(int n=0;n<100;n++)
{
if((i*x)==n*(y*j))
{
a[p][0]=(i*x);
a[p][1]=(y*j);
}
else
{
if((i*x)<(y*j))
{
for(int m=1;m<(i*x);m++)
{
if((i*x)%m==0&&(y*j)%m==0)
{
a[p][0]=(i*x)/m;
a[p][1]=(y*j)/m;
}
}
}
if((i*x)>(y*j))
{
for(int m=1;m<(y*j);m++)
{
if((i*x)%m==0&&(y*j)%m==0)
{
a[p][0]=(i*x)/m;
a[p][1]=(y*j)/m;
}
}
}
}
}
break;
case 3:
            cout<<"("<<i<<"/"<<j<<")"<<"/"<<"("<<x<<"/"<<y<<")"<<"=";
for(int n=0;n<100;n++)
{
if((i*y)==n*(x*j))
{
a[p][0]=(i*y);
a[p][1]=(x*j);
}
else
{
if((i*y)<(x*j))
{
for(int m=1;m<(i*y);m++)
{
if((i*y)%m==0&&(x*j)%m==0)
{
a[p][0]=(i*y)/m;
a[p][1]=(x*j)/m;
}
}
}
if((i*y)>(x*j))
{
for(int m=1;m<(x*j);m++)
{
if((i*y)%m==0&&(x*j)%m==0)
{
a[p][0]=(i*y)/m;
a[p][1]=(x*j)/m;
}
}
}
}
}


}
if(p%5==4)
{
cout<<endl;
}
else
{
cout<<'\t';
}
}
}
void DisplayFenshu(int a[][2],int w,int m)
{
    if(w==1)
    {
         for(int q=0;q<m;q++)
        {
            if(a[q][0]==0)
{
                cout<<"0"<<'\t';
}
if(a[q][0]!=0&&a[q][1]!=1)
{
cout<<a[q][0]<<"/"<<a[q][1]<<"\t";
}
if(a[q][0]!=0&&a[q][1]==1)
{
cout<<a[q][0]<<"\t";
}
            if(q%5==4)
            {
                cout<<endl;
            }
        }
    }
}


void zhengshu(int m,int x[][2])
{
for(int i=0;i<m;i++)
{
int a=rand()%10;
int b=rand()%10+1;
if(b==0)
{
a=rand()%10;
b=(rand()-1)%10;
}
int k=rand()%4;
switch(k)
{
case 0:
cout<<a<<"+"<<b<<"=";
x[i][0]=a+b;
x[i][1]=1;
break;
case 1:
cout<<a<<"-"<<b<<"=";
x[i][0]=a-b;
x[i][1]=1;
break;
case 2:
cout<<a<<"*"<<b<<"=";
x[i][0]=a*b;
x[i][1]=1;
break;
case 3:
            cout<<a<<"/"<<b<<"=";
for(int n=0;n<100;n++)
{
if(a==n*b)
{
x[i][0]=a/b;
x[i][1]=1;
}
else
{
if(a<b)
{
for(int m=1;m<a;m++)
{
if(a%m==0&&b%m==0)
{
x[i][0]=a/m;
x[i][1]=b/m;
}
}
}
if(a>b)
{
for(int m=1;m<b;m++)
{
if(a%m==0&&b%m==0)
{
x[i][0]=a/m;
x[i][1]=b/m;
}
}
}
}
}
}
if(i%5==4)
{
cout<<endl;
}
else
{
cout<<'\t';
}
}
}
void DisplayInt(int a[][2],int m,int n)
{
    if(m==1)
    {
         for(int q=0;q<n;q++)
        {
            if(a[q][0]==0)
{
                cout<<"0"<<'\t';
}
if(a[q][0]!=0&&a[q][1]!=1)
{
cout<<a[q][0]<<"/"<<a[q][1]<<"\t";
}
if(a[q][0]!=0&&a[q][1]==1)
{
cout<<a[q][0]<<"\t";
}
            if(q%5==4)
            {
                cout<<endl;
            }
        }
    }
    else
    {};
}


void main()
{
    int p;
    do
    {
        system("cls");
        int a[1000][2],b[1000][2];
        int m,n,w;
        cout<<"請輸入生成的四則運算題個數:";
        cin>>m;
        cout<<endl;
        cout<<"請輸入要生成的四則運算種類(輸入1爲整數,否則爲真分數):";
        cin>>n;
        cout<<endl;
if(n==1)
        {
            zhengshu(m,a);
            cout<<endl;
        }
        else
        {
            realfenshu(m,b);
            cout<<endl;
        }
        cout<<"是否輸出答案(輸入1則輸出答案否則不輸出答案)"<<endl;
        cin>>w;
        if(n==1)
        {
            DisplayInt(a,w,m);        
        }
        else
        {
            DisplayFenshu(b,w,m);
        }
        cout<<endl;
        cout<<"是否繼續生成運算題(輸入1則生成否則不生成)"<<endl;
        cin>>p;
        cout<<endl;
    }while(1==p);


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章