关于一个随机产生四则运算式子的问题。
- C/C++ code
string randomExcs(){ string expression(9,' ');//随机产生表达式长度最大为9 int left=2;//随机产生左括号位置,最大下标4 int right=left+4; expression[left]='('; expression[right]=')'; expression[(left+right)/2]=getOp(false); expression[left+1]=getOd(false); bool preIsDiv=expression[(left+right)/2]=='/'?true:false; expression[right-1]=getOd(preIsDiv); string inner(expression,left,right);//子串,括号内容 bool innerIsZero=FunOpes(inner)==0?true:false;//FunOpes计算string表示的式子,返回计算结果 expression[left-1]=getOp(innerIsZero); expression[0]=getOd(false); expression[1]=getOp(innerIsZero); expression[7]=getOp(innerIsZero); preIsDiv=expression[7]=='/'?true:false; expression[8]=getOd(preIsDiv); return expression;}char getOp(bool innerIsZero){ char ops[]={'+','-','*','/'}; return innerIsZero?ops[rand()%3]:ops[rand()%4];//判定括号内数字是否为0,为零则左括号前符号不能为除号}char getOd(bool preIsDiv){ char ods[]={'1','2','3','4','5','6','7','8','9','0'}; return preIsDiv?ods[rand()%9]:ods[rand()%10];}void buildExLib(){ fstream outLib("out.txt",ofstream::out); for(int i=1;i<10;i++) { srand((unsigned)time(NULL)); outLib<<randomExcs()<<"\n"; }}1.在buildExLib里面每次产生并输出到out.txt的式子为什么是一样的?
2.如何让式子产生的更自然一些(比如四中运算均匀的出现,不要再一个式子里面只出现一种)
[解决办法]
值得多学习一下,谢谢了~