题目:随机打印30道小学二到四年级的四则运算提。
要求:
我的代码如下:
#include<iostream>
#include<stdlib.h>
#include <conio.h>
using namespace std;
class Math
{
int mins,maxs,n,x,t;
int a[10000],b[10000][10000],c[10000][10000];
string s[10000];
public:
Math(int mins=0,int maxs=0,int n=0,int x=0,int t=0):mins(mins),maxs(maxs),n(n),x(x),t(t-1){}
~Math(){}
int PC(int i)
{
int p=0,g=0,h=0;
for(int y=0;y<i;y++)
{if(a[i]==a[y]){p++;}}
for(int y=0;y<i;y++)
for(int k=0;k<t;k++)
{
if(b[i][k]==b[y][k]){g++;}
if(c[i][k]==c[y][k]){h++;}
}
if(g==t&&h==t){p++;}
return p;
}
void TM()
{
int q=0;
while(q<n)//输出题目
{
a[q]=(rand()%(maxs-mins+1))+mins;
for(int r=0;r<t;r++)
{
b[q][r]=(rand()%(maxs-mins+1))+mins;
if(x==0){c[q][r]=rand()%2;}//乘除法判断
else{c[q][r]=rand()%4;}
}
if(PC(q)!=2){q++;}
}
for(int i=0;i<n;i++)
for(int j=0;j<t;j++)
{
switch(c[i][j])
{
case 0:
cout<<a[i]<<"+"<<b[i][j]<<"="<<endl;
break;
case 1:
if(a[i]<b[i][j])//避免得数出现负数
{
t=a[i];
b[i][j]=t;
a[i]=b[i][j];
}
cout<<a[i]<<"-"<<b[i][j]<<"="<<endl;
break;
case 2:
cout<<a[i]<<"*"<<b[i][j]<<"="<<endl;
break;
case 3:
if(b[i][j]==0)
{
while(b[i][j]==0)
{b[i][j]=(rand()%(maxs-mins+1))+mins;}
}//防止0为被除数
cout<<a[i]<<"/"<<b[i][j]<<"="<<endl;
break;
}
}
}
};
main()
{
int mins,maxs,n,x,t;
cout<<"请输入数的范围"<<endl;
cin>>mins>>maxs;//数的范围
cout<<"请输入题目总数:";
cin>>n;//题目个数
cout<<"是否有乘除法?是请输入1,否请输入0:";//是否有乘除法
cin>>x;
cout<<"输入操作数个数:";
cin>>t;
Math m(mins,maxs,n,x,t);
m.TM();
}
此代码实现了:随即打印不重复题目、定制数量、定制是否有乘除法、定制操作数数量、定制数值范围。
但因能力不足一时未实现有:定制是否有括号。且因JAVA甚不熟练,故此程序使用C++写成。
时间甚晚,明日继续。