无限抽题功能的实现思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dream4ever
V2EX    问与答

无限抽题功能的实现思路

  •  
  •   dream4ever 2021-04-29 15:22:07 +08:00 1042 次点击
    这是一个创建于 1629 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要实现的这个功能类似于学习强国里面的那个“挑战答题”,,具体需求如下:

    1. 只要用户答错一道题,本轮答题就立即结束。
    2. 如果答对,就能继续做下一道题,直到答完题库里的所有题。
    3. 在每一轮答题的过程中,同一道题最多只能让用户答一次。

    前两个需求我觉得挺简单,主要是最后一个,怎么能够给用户随机抽题,并且每次抽到题目都不重复呢?

    我想到的一种比较“笨”的办法,就是每次给用户下发 100 道题的编号,然后从这 100 道题里随机抽取编号,根据编号给用户发送题目。这 100 道题抽完之后,再给用户下发接下来的 100 道题,这样是不是既保证了随机性,也不会给后端太大的压力?

    另外还有什么更更好的方法能实现这个需求么?欢迎指点,谢谢先。

    kop1989
        1
    kop1989  
       2021-04-29 15:26:35 +08:00
    为何不每次客户端发起答题的时候,在客户端生成一个随机的答题号码串呢?
    dream4ever
        2
    dream4ever  
    OP
       2021-04-29 15:30:29 +08:00
    @kop1989 答题号码串用来记录已答题目信息?
    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]
    然后客户端按照这个串,去取题目就好了。
    dream4ever
        4
    dream4ever  
    OP
       2021-04-29 15:40:41 +08:00
    @kop1989 哦对,我刚才想的是你这种思路,不知道为什么写出来成了另一种思路了,好晕,哈哈。
    7075
        5
    7075  
       2021-04-29 15:51:35 +08:00
    问题有一些重要细节没有描述清楚。比如一共答几轮?每轮之间的具体限制条件是哪些?答错了题目全部重来?
    以目前的描述来看:
    要求一个用户,不限定轮数一辈子永远抽不到同一道题,那是不可能得,除非题库无限大。
    如果要一个用户,每个单独一轮里面,没有重复的题目,这个问题相当简单,方法也很多。最直观的,用题号所谓索引排重(散列到桶,set/map 等)即可
    dream4ever
        6
    dream4ever  
    OP
       2021-04-30 15:39:16 +08:00
    @7075 用户可以答任意轮数,在每一轮内,题库里的所有题目,用户最多只能答一遍,答错了一道题就本轮结束,开始新一轮的随机答题。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1031 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 22:56 PVG 06:56 LAX 15:56 JFK 18:56
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86