150313 那个可怜的二柱子同学

今天的软件工程概论课,老师出了这么个问题:

可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求:

  1. 题目避免重复
  2. 可定制(数量、打印方式);
  3. 可以控制下列参数:是否有乘除法、数值范围、加减有无负数、除法有无余数、是否支持分数(真分数、假分数);

我想了两种解决方法:

一.使用数据库:

  1. 避免重复:随机数及符号大量生成录入数据库,生成md5,数据库查询(Select Distinct MD5,第一整数,符号,第二整数 from 题目表)。
  2. 定制:输入框,输入题目数量。打印方式可以用[x++ if(x==?) cout<<endl;] 并可导出到word或excel或txt
  3. 从数据库查询时,查询加条件。例如:select * from 题目表 where 符号=‘*’     select * from 题目表 where 第二整数>0等。
  4. 分数问题:随机数生成时,约束两次生成随机数的大小控制真假分数,组成类似 第一整数/第二整数 。数据库数据类型可以为varchar用于保存整个分数。

二.不使用数据库:

  1. 避免重复:将生成题目作为字符串,保存到数组里。每生成一个题目,与数组里每个元素比对,重复即跳过本次循环。
  2. 定制:输入题目数量,和打印方式一样,利用[x++ if(x==?) cout<<endl;]
  3. 乘除法,打印时提取每个题目的符号,比对。其他类似。
  4. 分数问题:随机数生成时,约束两次生成随机数的大小控制真假分数,组成类似 第一整数/第二整数 。

个人偏向数据库解决,快下课时建了个表,可行。只是完全把算法实现抛之脑后,有点偷懒嫌疑...

原文地址:https://www.cnblogs.com/apak/p/4334852.html