今天的软件工程概论课,老师出了这么个问题:
可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求:
- 题目避免重复
- 可定制(数量、打印方式);
- 可以控制下列参数:是否有乘除法、数值范围、加减有无负数、除法有无余数、是否支持分数(真分数、假分数);
我想了两种解决方法:
一.使用数据库:
- 避免重复:随机数及符号大量生成录入数据库,生成md5,数据库查询(Select Distinct MD5,第一整数,符号,第二整数 from 题目表)。
- 定制:输入框,输入题目数量。打印方式可以用[x++ if(x==?) cout<<endl;] 并可导出到word或excel或txt
- 从数据库查询时,查询加条件。例如:select * from 题目表 where 符号=‘*’ select * from 题目表 where 第二整数>0等。
- 分数问题:随机数生成时,约束两次生成随机数的大小控制真假分数,组成类似 第一整数/第二整数 。数据库数据类型可以为varchar用于保存整个分数。
二.不使用数据库:
- 避免重复:将生成题目作为字符串,保存到数组里。每生成一个题目,与数组里每个元素比对,重复即跳过本次循环。
- 定制:输入题目数量,和打印方式一样,利用[x++ if(x==?) cout<<endl;]
- 乘除法,打印时提取每个题目的符号,比对。其他类似。
- 分数问题:随机数生成时,约束两次生成随机数的大小控制真假分数,组成类似 第一整数/第二整数 。
个人偏向数据库解决,快下课时建了个表,可行。只是完全把算法实现抛之脑后,有点偷懒嫌疑...