要实现的这个功能类似于学习强国里面的那个“挑战答题”,,具体需求如下:
前两个需求我觉得挺简单,主要是最后一个,怎么能够给用户随机抽题,并且每次抽到题目都不重复呢?
我想到的一种比较“笨”的办法,就是每次给用户下发 100 道题的编号,然后从这 100 道题里随机抽取编号,根据编号给用户发送题目。这 100 道题抽完之后,再给用户下发接下来的 100 道题,这样是不是既保证了随机性,也不会给后端太大的压力?
另外还有什么更更好的方法能实现这个需求么?欢迎指点,谢谢先。
1
kop1989 2021-04-29 15:26:35 +08:00
为何不每次客户端发起答题的时候,在客户端生成一个随机的答题号码串呢?
|
2
dream4ever OP @kop1989 答题号码串用来记录已答题目信息?
|
3
kop1989 2021-04-29 15:35:09 +08:00
@dream4ever #2 你的需求是只要每轮中的题目不重复就 ok 了是吧。
所以你可以在客户端知道“总题目数”的前提下每轮开始前(或者上轮结束后)都随机一个串。 比如第一轮:[1,3,5,7,8,9] 第二轮:[3,1,2,4,6,7] 然后客户端按照这个串,去取题目就好了。 |
4
dream4ever OP @kop1989 哦对,我刚才想的是你这种思路,不知道为什么写出来成了另一种思路了,好晕,哈哈。
|
5
7075 2021-04-29 15:51:35 +08:00
问题有一些重要细节没有描述清楚。比如一共答几轮?每轮之间的具体限制条件是哪些?答错了题目全部重来?
以目前的描述来看: 要求一个用户,不限定轮数一辈子永远抽不到同一道题,那是不可能得,除非题库无限大。 如果要一个用户,每个单独一轮里面,没有重复的题目,这个问题相当简单,方法也很多。最直观的,用题号所谓索引排重(散列到桶,set/map 等)即可 |
6
dream4ever OP @7075 用户可以答任意轮数,在每一轮内,题库里的所有题目,用户最多只能答一遍,答错了一道题就本轮结束,开始新一轮的随机答题。
|