• 产生30个两位数以内的式子程序


       首先是这样一个题目,随机出30道两位数以内的加减运算题。然后又这样几个要求:
       1.可以有真分数。
       2.题目尽量不能重复。
       3.除数不能为零。
       对于我考虑的事情就是在出随机数的时候,怎样来满足这样的要求。
    我的设计思路:
           大的思路就是先产生两个随机数,在产生一个随机运算符。三者结合起来便是一个运算式子。
           那么我们对每一小块内容进行拆分:
           第一块,产生两个随机数,随机数加一个时间种子,以免伪随机,产生相同的随机数。
           第二块,随即产生一个运算符,如果是除运算,而且除数为零,则重新产生除数,直到不为零为止。其他运算没有要求。
           我们随机产生四个数,比如a,b,c,d,a作为第一个数的分子,b作为第一个数的分母,a/b作为真分数的第一个分数。按照这样,给一个限定条件,就是当a<b并且c<d时,才产生真分数。
           不满足真分数条件时,"a运算符b="作为整数运算的式子,给定一个条件就是当除法运算时分母不为零,其他都可以。
           另外,加入满足真分数条件,但是分母为零,则回滚,重新生成四个随机数。
       具体代码如下:

    1.  /*
    2. 这个程序的功能是随机产生30个两位数以内的式子,可以有真分数
    3. 20133078
    4. */
    5. #include <iostream>
    6. #include <string>
    7. #include <time.h>//用到了time函数
    8. #define random(x)(rand()%x)
    9. #define N 30    //产生30个
    10. #define L 5     //控制行在每行5个式子
    11. using namespace std;
    12. void main()
    13. {
    14.     double rand1[N],rand2[N],rand3[N],rand4[N];
    15.     int i,j,k=1;
    16.     string ch[N];
    17.     srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
    18.     for (j=0;j<N;j++)             //先随机产生30种运算
    19.     {
    20.         int i=rand()%4;
    21.         switch(i%4)
    22.         {
    23.         case 0:ch[j]="+";break;
    24.         case 1:ch[j]="-";break;
    25.         case 2:ch[j]="*";break;
    26.         case 3:ch[j]="/";
    27.         }
    28.     }
    29.     cout<<"随机产生的30个算式如下所示:";
    30.     for(i=0;i<N;i++)
    31.     {
    32.         if(i%3==0)    //每行控制输出3个
    33.             cout<<endl;
    34.         rand1[i]=random(100);    //第一个数的分子
    35.         rand2[i]=random(100);    //第一个数的分母
    36.         rand3[i]=random(100);
    37.         rand4[i]=random(100);
    38.         if(rand1[i]<rand2[i]&&rand3[i]<rand4[i]&&rand2[i]!=0&&rand4[i]!=0&&rand3[i]!=0)      //真分数分母不为零
    39.             cout<<" "<<rand1[i]<<"/"<<rand2[i]<<ch[i]<<rand3[i]<<"/"<<rand4[i]<<"= ";
    40.         else if(ch[i]=="/"&&rand2[i]!=0)             //除法时候分母不能为零
    41.             cout<<" "<<rand1[i]<<ch[i]<<rand2[i]<<"= ";   
    42.         else if(ch[i]=="/"&&rand2[i]==0)             //除法分母为零时,返回重新生成随机数
    43.             i--;
    44.         else
    45.             cout<<" "<<rand1[i]<<ch[i]<<rand2[i]<<"= ";  
    46.     }
    47.     cout<<endl;
    48. }

        就这样产生30个式子后就可以了。题目虽简单,但是要考虑全面再完整的进行一次编程,感觉还是挺复杂的。

  • 相关阅读:
    node中npm安装模块的网络问题
    微信开发
    7-49 打印学生选课清单 (25 分) 数据结构与算法题目集(中文)
    7-53 两个有序序列的中位数 (25 分) 数据结构与算法题目集(中文)
    练习4.2 平衡二叉树的根 (25 分) 浙大版《数据结构(第2版)》题目集
    习题4.3 是否二叉搜索树 (25 分) 浙大版《数据结构(第2版)》题目集
    实验3-1 求一元二次方程的根 (20 分) 《C语言程序设计实验与习题指导(第3版)》
    主元素问题
    未出现的最小正整数
    交换两个线性表位置(或循环移动数组元素)
  • 原文地址:https://www.cnblogs.com/cnyulei/p/5244488.html
Copyright © 2020-2023  润新知