zoukankan      html  css  js  c++  java
  • 小学四则运算2.0

    1 //信1301-1班 张鹏宇 四则运算
      2 /*代码结构如下:
      3 (——表示之后还有分类,否则是直接输出)
      4 减法没有负数——
      5     没有乘除法——
      6         有括号
      7         无括号
      8     有乘除法——
      9         除法没有余数
     10         除法余数不作要求
     11 减法负数不做要求——
     12     没有乘除法——
     13         有括号
     14         无括号
     15     有乘除法——
     16         除法没有余数
     17         除法余数不作要求
     18 
     19 说明:
     20 1,负数部分:先产生所有符号,存在数组,扫描,设置标志位flag=1
     21               当前符号为+时:下一个符号为+或-,则产生一个随机数,并做+运算,将结果存在一个数组中,将“num1+num2”这个式子转化为字符串
     22                              下一个符号为*或/时,只产生一个随机数,并将flag置0
     23               当前符号为-时:下一个符号为+或-,则产生一个随机数,并做-运算,将结果存在一个数组中,将“num1-num2”这个式子转化为字符串
     24                              下一个符号为*或/时,只产生一个随机数,并将flag置0
     25               当前符号为*时:flag=1,则产生一个随机数,并做*运算,将结果存在一个数组中,将“num1*num2”这个式子转化为字符串
     26                              flag=0,则产生两个随机数,并做*运算,将结果存在一个数组中,将“num1*num2”这个式子转化为字符串
     27               当前符号为时/:flag=1,则产生一个随机数,并做/运算,将结果存在一个数组中,将“num1/num2”这个式子转化为字符串
     28                              flag=0,则产生两个随机数,并做/运算,将结果存在一个数组中,将“num1/num2”这个式子转化为字符串
     29               这样做考虑到优先级,存储了每一步的结果,可以保证每一步出现减法的部分都不是负数
     30               而且转化为字符串便于输出
     31 2,括号部分:用了两个变量,一个随机数看是否有括号,一个看括号位置
     32           位置的时候用了一个flag变量,保证括号成对出现
     33           而且根据符号的个数可以排除在最后一个数的时候还添加前括号,只有两个变量的时候还添加括号
     34 3,余数部分:用了一个for循环,判定是除法的时候,用num1%num2做条件
     35 4,乘除法部分:跟第一次作业类似,注意除数不为零
     36 5,数值范围:用户输入,你懂得
     37 6,定制方式:用户选择
     38 
     39 */
     40 #include<iostream>
     41 #include<stdio.h>
     42 #include<time.h>
     43 #include<fstream>
     44 #include<string.h>
     45 #include<sstream>
     46 using namespace std;
     47 
     48 void main()
     49 {
     50     int range,signbracket;
     51     int way,bracket,minus,muldiv,div,numsign,sign;
     52     int num1,num2,num3=0,number;
     53     string Num1,Num2,Num3;
     54     int i;
     55     ofstream outfile("ZhangPY.txt",ios::out);//
     56     srand((unsigned)time(NULL));
     57     
     58     cout<<"请输入打印方式(文件打印请输入1,dos打印请输入0):";
     59     cin>>way;
     60     cout<<"请输入操作数允许最大值:                           ";
     61     cin>>range;
     62     cout<<"减法是否出现负数(不作要求请输入1,否请输入0):   ";
     63     cin>>minus;
     64     cout<<"是否有乘除法(是请输入1,否请输入0):             ";
     65     cin>>muldiv; 
     66     cout<<"请输入打印数量:                                   ";
     67     cin>>number;
     68     if(muldiv==1)
     69     {
     70         cout<<"除法是否有余数(不作要求请输入1,否请输入0):            ";
     71         cin>>div;
     72     }
     73     else
     74     {
     75         cout<<"是否有括号(是请输入1,否请输入0):               ";
     76         cin>>bracket;
     77     }
     78     for(i=0;i<number;i++)
     79     {
     80         
     81             if(minus==0)
     82             {                                                       //减法没有负数
     83                 if(muldiv==0)
     84                 {                                                   //无乘除法
     85                     numsign=rand()%9+1;    //符号数目随机 
     86                     num1=rand()%range;    //第一个变量
     87                     num3=num1;
     88                     stringstream stream;    //int转化为string
     89                     stream.clear();
     90                     stream<< num1; 
     91                     stream >> Num1;  
     92                     int sb=0;
     93                     for(int j=0;j<numsign;j++)
     94                     {   
     95                         sign=rand()%2;
     96                         if(bracket==0)
     97                             signbracket=0;
     98                         else
     99                             signbracket=rand()%2;
    100                         if(sign==0)
    101                         {     //+
    102                             num2=rand()%range;
    103                             num3=num2+num3;
    104                             stringstream stream;    //int转化为string
    105                             stream<< num2; 
    106                             stream >> Num2; 
    107                             stream.clear(); 
    108                             if(signbracket==1)
    109                             {
    110                                 if(sb==0&&(j!=numsign-1))
    111                                 {
    112                                     Num1=Num1+'+'+'('+Num2;
    113                                     sb=-1;
    114                                 }
    115                                 else if(j==numsign-1&&sb==0)
    116                                     Num1=Num1+'+'+Num2;
    117                                 else
    118                                 {
    119                                     Num1=Num1+'+'+Num2+')';
    120                                     sb=0;
    121                                 }
    122                             }
    123                             else 
    124                             {
    125                                 if(sb==-1&&j==numsign-1)
    126                                     Num1=Num1+'+'+Num2+')';
    127                                 else
    128                                     Num1=Num1+'+'+Num2;    
    129                             }                        
    130                         }
    131                         else
    132                         {       //-
    133                             num2=rand()%range;
    134                             for(;num3-num2<0;)
    135                                 num2=rand()%range;
    136                             num3=num3-num2;
    137                             stream<< num2; 
    138                             stream >> Num2; 
    139                             stream.clear();
    140                             if(signbracket==1)
    141                             {
    142                                 if(sb==0&&(j!=numsign-1))
    143                                 {
    144                                     Num1=Num1+'+'+'('+Num2;
    145                                     sb=-1;
    146                                 }
    147                                 else if(j==numsign-1&&sb==0)
    148                                     Num1=Num1+'+'+Num2;
    149                                 else
    150                                 {
    151                                     Num1=Num1+'+'+Num2+')';
    152                                     sb=0;
    153                                 }
    154                             }
    155                             else 
    156                             {
    157                                 if(sb==-1&&j==numsign-1)
    158                                     Num1=Num1+'+'+Num2+')';
    159                                 else
    160                                     Num1=Num1+'+'+Num2;    
    161                             }
    162                         }
    163                     }
    164                     if(way==1)
    165                     {
    166                         if(!outfile)
    167                         {
    168                             cerr<<"open error!"<<endl;
    169                             exit(1);
    170                         }
    171                         else
    172                         outfile<<Num1<<"="<<endl;
    173                     }
    174                     else if(way==0)
    175                         cout<<Num1<<"="<<endl;
    176                 }
    177 
    178                 else
    179                 {                                                                   //有乘除法
    180                     if(div==0)
    181                     {                                                         //没有余数
    182                         string answer[10];     //保存乘除结果
    183                         int Answer[10];
    184                         int k=0;
    185                         bool flag=1;
    186                         int Sign[10]={0};     //保存符号
    187                         numsign=rand()%9+1;    //符号数目随机
    188                         for(int j=0;j<numsign;j++)
    189                             Sign[j]=rand()%4;
    190                         num1=rand()%range;
    191                         Answer[k]=num1;
    192                         stringstream stream;    //int转化为string
    193                         stream.clear(); 
    194                         stream<< num1; 
    195                         stream >> answer[k]; 
    196                         for(int j=0;j<numsign;j++)     //第一遍扫描处理乘除和加
    197                         {
    198                             if(Sign[j]==0)      //+
    199                             {
    200                                 if(Sign[j+1]==1||Sign[j+1]==0)
    201                                 {
    202                                     num2=rand()%range;
    203                                     Answer[k]=Answer[k]+num2;
    204                                     stream.clear(); 
    205                                     stream<< num2; 
    206                                     stream >> Num2; 
    207                                     answer[k]=answer[k]+'+'+Num2;
    208                                 }
    209                                 else
    210                                 {
    211                                     num3=rand()%range;
    212                                     stream.clear(); 
    213                                     stream<< num3; 
    214                                     stream >> Num3;  
    215                                     k=k+1;
    216                                     flag=0;
    217                                 }
    218                             }
    219                             else if(Sign[j]==1)     //-
    220                             {
    221                                 if(Sign[j+1]==0||Sign[j+1]==1)
    222                                 {
    223                                     num2=rand()%range;
    224                                     for(;Answer[k]<num2;)
    225                                         num2=rand()%range;
    226                                     Answer[k]=Answer[k]-num2;
    227                                     stream.clear(); 
    228                                     stream<< num2; 
    229                                     stream >> Num2;  
    230                                     answer[k]=answer[k]+'-'+Num2;
    231                                 }
    232                                 else
    233                                 {
    234                                     num3=rand()%range;
    235                                     stream.clear(); 
    236                                     stream<< num3; 
    237                                     stream >> Num3; 
    238                                     k=k+1;
    239                                     flag=0;
    240                                 }
    241                             }
    242                             else if(Sign[j]==2)     //*
    243                             {
    244                                 if(flag==1)
    245                                 {
    246                                     num2=rand()%range;
    247                                     Answer[k]=Answer[k]*num2;
    248                                     stream.clear(); 
    249                                     stream<< num2; 
    250                                     stream >> Num2;  
    251                                     answer[k]=answer[k]+'*'+Num2;
    252                                 }
    253                                 else 
    254                                 {
    255                                     num2=rand()%range;
    256                                     Answer[k]=num3*num2;
    257                                     stream.clear(); 
    258                                     stream<< num2; 
    259                                     stream >> Num2; 
    260                                     answer[k]=Num3+'*'+Num2;
    261                                     flag=1;
    262                                 }
    263                             }
    264                             else if(Sign[j]==3)     // /
    265                             {
    266                                 if(flag==1)
    267                                 {
    268                                     num2=rand()%(range)+1;
    269                                     for(;Answer[k]%num2!=0;)
    270                                         num2=rand()%(range)+1;
    271                                     num3=Answer[k]/num2;
    272                                     stream.clear(); 
    273                                     stream<< num2; 
    274                                     stream >> Num2; 
    275                                     answer[k]=answer[k]+'/'+Num2;                            
    276                                 }
    277                                 else
    278                                 {
    279                                     num2=rand()%(range)+1;
    280                                     for(;num3%num2!=0;)
    281                                         num2=rand()%(range)+1;
    282                                     Answer[k]=num3/num2;
    283                                     stream.clear(); 
    284                                     stream<< num2; 
    285                                     stream >> Num2; 
    286                                     answer[k]=Num3+'/'+Num2;
    287                                     flag=1;
    288                                 }
    289                             }
    290                         }
    291                         
    292                         num3=Answer[0];
    293                         Num1=answer[0];
    294                         for(int j=1;j<k;j++)      //处理合并
    295                         {
    296                             sign=rand()%2;
    297                             if(sign==0)
    298                             {
    299                                 num3=num3+Answer[j];
    300                                 Num1=Num1+'+'+answer[j];
    301                             }
    302                             else
    303                             {
    304                                 for(;num3<Answer[j];)
    305                                 {
    306                                     num3=num3+Answer[j];
    307                                     Num1=Num1+'+'+answer[j];
    308                                 }
    309                                 num3=num3-Answer[j];
    310                                 Num1=Num1+'-'+answer[j];
    311                             }
    312                         }
    313                         if(way==1)
    314                         {
    315                             if(!outfile)
    316                             {
    317                                 cerr<<"open error!"<<endl;
    318                                 exit(1);
    319                             }
    320                             else
    321                             {
    322                                 if(num1==num3)
    323                                     outfile<<Num1<<"*1="<<endl;
    324                                 else
    325                                     outfile<<Num1<<"="<<endl;
    326                             }
    327                        }
    328                         else {
    329                             if(num1==num3)
    330                                 cout<<Num1<<"*1="<<endl;
    331                             else
    332                                 cout<<Num1<<"="<<endl;
    333                         }
    334                      }
    335                     
    336                     else{                                                                 //余数不作要求
    337                         string answer[10];     //保存乘除结果
    338                         int Answer[10];
    339                         int k=0;
    340                         bool flag=1;
    341                         int Sign[9];     //保存符号
    342                         numsign=rand()%9;    //符号数目随机
    343                         numsign=numsign+1;
    344                         for(int j=0;j<numsign;j++)
    345                             Sign[j]=rand()%4;
    346                         num1=rand()%range;
    347                         Answer[k]=num1;
    348                         stringstream stream;    //int转化为string
    349                         stream.clear(); 
    350                         stream<< num1; 
    351                         stream >> answer[k]; 
    352                         for(int j=0;j<numsign;j++)     //第一遍扫描处理乘除和加
    353                         {
    354                             if(Sign[j]==0)      //+
    355                             {
    356                                 if(Sign[j+1]==1||Sign[j+1]==0)
    357                                 {
    358                                     num2=rand()%range;
    359                                     Answer[k]=Answer[k]+num2;
    360                                     stream.clear(); 
    361                                     stream<< num2; 
    362                                     stream >> Num2; 
    363                                     answer[k]=answer[k]+'+'+Num2;
    364                                 }
    365                                 else
    366                                 {
    367                                     num3=rand()%range;
    368                                     stream.clear(); 
    369                                     stream<< num3; 
    370                                     stream >> Num3;  
    371                                     k=k+1;
    372                                     flag=0;
    373                                 }
    374                             }
    375                             else if(Sign[j]==1)     //-
    376                             {
    377                                 if(Sign[j+1]==0||Sign[j+1]==1)
    378                                 {
    379                                     num2=rand()%range;
    380                                     for(;Answer[k]<num2;)
    381                                         num2=rand()%range;
    382                                     Answer[k]=Answer[k]-num2;
    383                                     stream.clear(); 
    384                                     stream<< num2; 
    385                                     stream >> Num2;  
    386                                     answer[k]=answer[k]+'-'+Num2;
    387                                 }
    388                                 else
    389                                 {
    390                                     num3=rand()%range;
    391                                     stream.clear(); 
    392                                     stream<< num3; 
    393                                     stream >> Num3; 
    394                                     k=k+1;
    395                                     flag=0;
    396                                 }
    397                             }
    398                             else if(Sign[j]==2)     //*
    399                             {
    400                                 if(flag==1)
    401                                 {
    402                                     num2=rand()%range;
    403                                     Answer[k]=Answer[k]*num2;
    404                                     stream.clear(); 
    405                                     stream<< num2; 
    406                                     stream >> Num2;  
    407                                     answer[k]=answer[k]+'*'+Num2;
    408                                 }
    409                                 else 
    410                                 {
    411                                     num2=rand()%range;
    412                                     Answer[k]=num3*num2;
    413                                     stream.clear(); 
    414                                     stream<< num2; 
    415                                     stream >> Num2; 
    416                                     answer[k]=Num3+'*'+Num2;
    417                                     flag=1;
    418                                 }
    419                             }
    420                             else if(Sign[j]==3)     // /
    421                             {
    422                                 if(flag==1)
    423                                 {
    424                                     num2=rand()%(range)+1;
    425                                     num3=Answer[k]/num2;
    426                                     stream.clear(); 
    427                                     stream<< num2; 
    428                                     stream >> Num2; 
    429                                     answer[k]=answer[k]+'/'+Num2;                            
    430                                 }
    431                                 else
    432                                 {
    433                                     num2=rand()%(range)+1;
    434                                     Answer[k]=num3/num2;
    435                                     stream.clear(); 
    436                                     stream<< num2; 
    437                                     stream >> Num2; 
    438                                     answer[k]=Num3+'/'+Num2;
    439                                     flag=1;
    440                                 }
    441                             }
    442                         }                        
    443                         num3=Answer[0];
    444                         Num1=answer[0];
    445                         for(int j=1;j<k;j++)      //处理合并
    446                         {
    447                             sign=rand()%2;
    448                             if(sign==0)
    449                             {
    450                                 num3=num3+Answer[j];
    451                                 Num1=Num1+'+'+answer[j];
    452                             }
    453                             else
    454                             {
    455                                 for(;num3<Answer[j];)
    456                                 {
    457                                     num3=num3+Answer[j];
    458                                     Num1=Num1+'+'+answer[j];
    459                                 }
    460                                 num3=num3-Answer[j];
    461                                 Num1=Num1+'-'+answer[j];
    462                             }
    463                         }
    464                         if(way==1)
    465                         {
    466                             if(!outfile)
    467                             {
    468                                 cerr<<"open error!"<<endl;
    469                                 exit(1);
    470                             }
    471                             else
    472                             {
    473                                 if(num1==num3)
    474                                     outfile<<Num1<<"*1="<<endl;
    475                                 else
    476                                     outfile<<Num1<<"="<<endl;
    477                             }
    478                        }
    479                         else {
    480                             if(num1==num3)
    481                                 cout<<Num1<<"*1="<<endl;
    482                             else
    483                                 cout<<Num1<<"="<<endl;
    484                         }
    485                     }
    486                 }
    487             }
    488             else{                                                                //减法不作要求
    489                  if(muldiv==0)
    490                  {                                                  //无乘除法
    491                      int sb=0;
    492                      numsign=rand()%9+1;    //符号数目随机
    493                      num1=rand()%range;    //第一个变量
    494                      num3=num1;
    495                      stringstream stream;    //int转化为string
    496                      stream<< num1; 
    497                      stream >> Num1; 
    498                      stream.clear();
    499                      if(bracket==0)
    500                             signbracket=0;
    501                         else
    502                             signbracket=rand()%2;
    503                      for(int j=0;j<numsign;j++)
    504                      {
    505                         sign=rand()%2;
    506                         if(sign==0)
    507                         {     //+
    508                             num2=rand()%range;
    509                             num3=num2+num3;
    510                             stringstream stream;    //int转化为string
    511                             stream<< num2; 
    512                             stream >> Num2; 
    513                             stream.clear(); 
    514                             if(signbracket==1)
    515                             {
    516                                 if(sb==0&&(j!=numsign-1))
    517                                 {
    518                                     Num1=Num1+'+'+'('+Num2;
    519                                     sb=-1;
    520                                 }
    521                                 else if(j==numsign-1&&sb==0)
    522                                     Num1=Num1+'+'+Num2;
    523                                 else
    524                                 {
    525                                     Num1=Num1+'+'+Num2+')';
    526                                     sb=0;
    527                                 }
    528                             }
    529                             else 
    530                             {
    531                                 if(sb==-1&&j==numsign-1)
    532                                     Num1=Num1+'+'+Num2+')';
    533                                 else
    534                                     Num1=Num1+'+'+Num2;    
    535                             }                
    536                         }
    537                         else
    538                         {       //-
    539                             num2=rand()%range;
    540                             num3=num3-num2;
    541                             stream<< num2; 
    542                             stream >> Num2; 
    543                             stream.clear();
    544                             if(signbracket==1)
    545                             {
    546                                 if(sb==0&&(j!=numsign-1))
    547                                 {
    548                                     Num1=Num1+'-'+'('+Num2;
    549                                     sb=-1;
    550                                 }
    551                                 else if(j==numsign-1&&sb==0)
    552                                     Num1=Num1+'-'+Num2;
    553                                 else
    554                                 {
    555                                     Num1=Num1+'-'+Num2+')';
    556                                     sb=0;
    557                                 }
    558                             }
    559                             else 
    560                             {
    561                                 if(sb==-1&&j==numsign-1)
    562                                     Num1=Num1+'-'+Num2+')';
    563                                 else
    564                                     Num1=Num1+'-'+Num2;    
    565                             }                
    566                         }
    567                     }
    568                     if(way==1)
    569                     {
    570                         if(!outfile)
    571                         {
    572                             cerr<<"open error!"<<endl;
    573                             exit(1);
    574                         }
    575                         else
    576                         outfile<<Num1<<"="<<endl;
    577                     }
    578                     else if(way==0)
    579                         cout<<Num1<<"="<<endl;
    580                 }
    581 
    582                 else
    583                 {                                                                   //有乘除法
    584                     if(div==0)
    585                     {                                                         //没有余数
    586                         string answer[10];     //保存乘除结果
    587                         int Answer[10];
    588                         int k=0;
    589                         bool flag=1;
    590                         int Sign[10]={0};     //保存符号
    591                         numsign=rand()%9+1;    //符号数目随机
    592                         for(int j=0;j<numsign;j++)
    593                             Sign[j]=rand()%4;
    594                         num1=rand()%range;
    595                         Answer[k]=num1;
    596                         stringstream stream;    //int转化为string
    597                         stream.clear(); 
    598                         stream<< num1; 
    599                         stream >> answer[k]; 
    600                         for(int j=0;j<numsign;j++)     //第一遍扫描处理乘除和加
    601                         {
    602                             if(Sign[j]==0)      //+
    603                             {
    604                                 if(Sign[j+1]==1||Sign[j+1]==0)
    605                                 {
    606                                     num2=rand()%range;
    607                                     Answer[k]=Answer[k]+num2;
    608                                     stream.clear(); 
    609                                     stream<< num2; 
    610                                     stream >> Num2; 
    611                                     answer[k]=answer[k]+'+'+Num2;
    612                                 }
    613                                 else
    614                                 {
    615                                     num3=rand()%range;
    616                                     stream.clear(); 
    617                                     stream<< num3; 
    618                                     stream >> Num3;  
    619                                     k=k+1;
    620                                     flag=0;
    621                                 }
    622                             }
    623                             else if(Sign[j]==1)     //-
    624                             {
    625                                 if(Sign[j+1]==0||Sign[j+1]==1)
    626                                 {
    627                                     num2=rand()%range;
    628                                     Answer[k]=Answer[k]-num2;
    629                                     stream.clear(); 
    630                                     stream<< num2; 
    631                                     stream >> Num2;  
    632                                     answer[k]=answer[k]+'-'+Num2;
    633                                 }
    634                                 else
    635                                 {
    636                                     num3=rand()%range;
    637                                     stream.clear(); 
    638                                     stream<< num3; 
    639                                     stream >> Num3; 
    640                                     k=k+1;
    641                                     flag=0;
    642                                 }
    643                             }
    644                             else if(Sign[j]==2)     //*
    645                             {
    646                                 if(flag==1)
    647                                 {
    648                                     num2=rand()%range;
    649                                     Answer[k]=Answer[k]*num2;
    650                                     stream.clear(); 
    651                                     stream<< num2; 
    652                                     stream >> Num2;  
    653                                     answer[k]=answer[k]+'*'+Num2;
    654                                 }
    655                                 else 
    656                                 {
    657                                     num2=rand()%range;
    658                                     Answer[k]=num3*num2;
    659                                     stream.clear(); 
    660                                     stream<< num2; 
    661                                     stream >> Num2; 
    662                                     answer[k]=Num3+'*'+Num2;
    663                                     flag=1;
    664                                 }
    665                             }
    666                             else if(Sign[j]==3)     // /
    667                             {
    668                                 if(flag==1)
    669                                 {
    670                                     num2=rand()%(range)+1;
    671                                     for(;Answer[k]%num2!=0;)
    672                                         num2=rand()%(range)+1;
    673                                     num3=Answer[k]/num2;
    674                                     stream.clear(); 
    675                                     stream<< num2; 
    676                                     stream >> Num2; 
    677                                     answer[k]=answer[k]+'/'+Num2;                            
    678                                 }
    679                                 else
    680                                 {
    681                                     num2=rand()%(range)+1;
    682                                     for(;num3%num2!=0;)
    683                                         num2=rand()%(range)+1;
    684                                     Answer[k]=num3/num2;
    685                                     stream.clear(); 
    686                                     stream<< num2; 
    687                                     stream >> Num2; 
    688                                     answer[k]=Num3+'/'+Num2;
    689                                     flag=1;
    690                                 }
    691                             }
    692                         }                        
    693                         num3=Answer[0];
    694                         Num1=answer[0];
    695                         for(int j=1;j<k;j++)      //处理合并
    696                         {
    697                             sign=rand()%2;
    698                             if(sign==0)
    699                             {
    700                                 num3=num3+Answer[j];
    701                                 Num1=Num1+'+'+answer[j];
    702                             }
    703                             else
    704                             {
    705                                 num3=num3-Answer[j];
    706                                 Num1=Num1+'-'+answer[j];
    707                             }
    708                         }
    709                         if(way==1)
    710                         {
    711                             if(!outfile)
    712                             {
    713                                 cerr<<"open error!"<<endl;
    714                                 exit(1);
    715                             }
    716                             else
    717                             {
    718                                 if(num1==num3)
    719                                     outfile<<Num1<<"*1="<<endl;
    720                                 else
    721                                     outfile<<Num1<<"="<<endl;
    722                             }
    723                        }
    724                         else 
    725                             cout<<Num1<<"="<<endl;                        
    726                     }                    
    727                     else
    728                     {                                                                 //余数不作要求
    729                         string answer[10];     //保存乘除结果
    730                         int Answer[10];
    731                         int k=0;
    732                         bool flag=1;
    733                         int Sign[9];     //保存符号
    734                         numsign=rand()%9;    //符号数目随机
    735                         numsign=numsign+1;
    736                         for(int j=0;j<numsign;j++)
    737                             Sign[j]=rand()%4;
    738                         num1=rand()%range;
    739                         Answer[k]=num1;
    740                         stringstream stream;    //int转化为string
    741                         stream.clear(); 
    742                         stream<< num1; 
    743                         stream >> answer[k]; 
    744                         for(int j=0;j<numsign;j++)     //第一遍扫描处理乘除和加
    745                         {
    746                             if(Sign[j]==0)      //+
    747                             {
    748                                 if(Sign[j+1]==1||Sign[j+1]==0)
    749                                 {
    750                                     num2=rand()%range;
    751                                     Answer[k]=Answer[k]+num2;
    752                                     stream.clear(); 
    753                                     stream<< num2; 
    754                                     stream >> Num2; 
    755                                     answer[k]=answer[k]+'+'+Num2;
    756                                 }
    757                                 else
    758                                 {
    759                                     num3=rand()%range;
    760                                     stream.clear(); 
    761                                     stream<< num3; 
    762                                     stream >> Num3;  
    763                                     k=k+1;
    764                                     flag=0;
    765                                 }
    766                             }
    767                             else if(Sign[j]==1)     //-
    768                             {
    769                                 if(Sign[j+1]==0||Sign[j+1]==1)
    770                                 {
    771                                     num2=rand()%range;
    772                                     Answer[k]=Answer[k]-num2;
    773                                     stream.clear(); 
    774                                     stream<< num2; 
    775                                     stream >> Num2;  
    776                                     answer[k]=answer[k]+'-'+Num2;
    777                                 }
    778                                 else
    779                                 {
    780                                     num3=rand()%range;
    781                                     stream.clear(); 
    782                                     stream<< num3; 
    783                                     stream >> Num3; 
    784                                     k=k+1;
    785                                     flag=0;
    786                                 }
    787                             }
    788                             else if(Sign[j]==2)     //*
    789                             {
    790                                 if(flag==1)
    791                                 {
    792                                     num2=rand()%range;
    793                                     Answer[k]=Answer[k]*num2;
    794                                     stream.clear(); 
    795                                     stream<< num2; 
    796                                     stream >> Num2;  
    797                                     answer[k]=answer[k]+'*'+Num2;
    798                                 }
    799                                 else 
    800                                 {
    801                                     num2=rand()%range;
    802                                     Answer[k]=num3*num2;
    803                                     stream.clear(); 
    804                                     stream<< num2; 
    805                                     stream >> Num2; 
    806                                     answer[k]=Num3+'*'+Num2;
    807                                     flag=1;
    808                                 }
    809                             }
    810                             else if(Sign[j]==3)     // /
    811                             {
    812                                 if(flag==1)
    813                                 {
    814                                     num2=rand()%(range)+1;
    815                                     num3=Answer[k]/num2;
    816                                     stream.clear(); 
    817                                     stream<< num2; 
    818                                     stream >> Num2; 
    819                                     answer[k]=answer[k]+'/'+Num2;                            
    820                                 }
    821                                 else
    822                                 {
    823                                     num2=rand()%(range)+1;
    824                                     Answer[k]=num3/num2;
    825                                     stream.clear(); 
    826                                     stream<< num2; 
    827                                     stream >> Num2; 
    828                                     answer[k]=Num3+'/'+Num2;
    829                                     flag=1;
    830                                 }
    831                             }
    832                         }                        
    833                         num3=Answer[0];
    834                         Num1=answer[0];
    835                         for(int j=1;j<k;j++)      //处理合并
    836                         {
    837                             sign=rand()%2;
    838                             if(sign==0)
    839                             {
    840                                 num3=num3+Answer[j];
    841                                 Num1=Num1+'+'+answer[j];
    842                             }
    843                             else
    844                             {
    845                                 for(;num3<Answer[j];)
    846                                 num3=num3-Answer[j];
    847                                 Num1=Num1+'-'+answer[j];
    848                             }
    849                         }
    850                         if(way==1)
    851                         {
    852                             if(!outfile)
    853                             {
    854                                 cerr<<"open error!"<<endl;
    855                                 exit(1);
    856                             }
    857                             else
    858                             {
    859                                 if(num1==num3)
    860                                     outfile<<Num1<<"*1="<<endl;
    861                                 else
    862                                     outfile<<Num1<<"="<<endl;
    863                             }
    864                        }
    865                         else 
    866                             cout<<Num1<<"="<<endl;
    867                     }
    868                 }
    869             }        
    870         }
    871        
    872     }
    缺陷:1,乘除加括号有的时候会出bug,会出现缺少右括号或者两个运算符在一起的情况,应该是控制条件出错了,不过调试的很长时间,没有办法保证完全正确,偶尔会有bug
    2,输出算式的时候会出现,一个随机数=,的情况,循环条件的问题,多次调试未果,添加了一个条件结构弄了一个伪随机,这个做的不太好
    3,添加的括号数目随机,位置随机,但是没有办法出现嵌套,也没有思路,想过用栈,不过最终没有成型,不知道具体怎么实现
    4,查重,最后所有的算式都转化成了string类型,想过用string类型的数组保存所有结果外进行查重,不过代码太长了,加了几次数组,会出现结构错误,最后删除了
    5,没有做分数的,不知道dos怎么输出分数,之前的分数是用除法形式输出的,这次加括号加除法二者会重复,随意没有加分数

    项目计划纪录(单位:h):
      听课 编写程序 阅读相关书籍 网上查找资料 日总结
    周一 2 3
    周二

    周三

    0
    周四
    周五 8
    周六
    周日
    周总计 19  27 
    时间记录日志(单位:min):
    日期 开始时间 结束时间 中断时间 净时间 活动 备注
    星期一 14:00 15:50  10   100 听课 软件工程
      19:00 20:00  60 看书  构建之法
    星期二 19:00 20:00  60  编程 四则运算
    星期三 15:00 18:00 20  160  编程
      19:30 22:00 20  130  编程  四则运算
    星期四 14:00 15:50  10  100  听课 四则运算
      19:30 22:30  30  150  看书  
    星期五 9:00 9:50  50  看书 构建之法
      20:00 22:00  20  100  编程   
    星期六 9:00 10:00  60 看书 构建之法
      15:00 16:00 60 编程 写博客 构建之法
  • 相关阅读:
    eclipse
    一次性验证码
    mybatis。逆向工程
    mybatis02.动态sql
    mybatis01
    plsql
    HDU.2149 Public Sale (博弈论 巴什博弈)
    HDU.1846 Brave Game (博弈论 巴什博弈)
    博弈论快速入门
    HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)
  • 原文地址:https://www.cnblogs.com/fooreveryu/p/5249676.html
Copyright © 2011-2022 走看看