Matrix--打乱选择题

来源:互联网 发布:怎么修改淘宝追加评价 编辑:程序博客网 时间:2024/05/15 22:25

伪随机种子,生成n个数的随机不重复序列。

需求分析:

做选择题的时候有这样的需求,对于不同的学生,他们要能够看到不一样的打乱方式。但是对于同一个学生,他应该只能有一种打乱方式。

因此,我们需要构造一个函数,它的参数列表类似于这样

@param max 指输入的要打乱的最大数值@return 0max-1的随机不重复序列。function (studentId, problemId, max)

用哈希来实现伪随机性。将学号和题目ID做一个运算(这里选择平方和)再取余。
每次选择一个数并将它放到队尾。

js实现代码如下:

/** *根据studentid和problemid生成的一个 *[0 - max-1]的随机不重复序列 *@author 王镇佳 wzjfloor@163.com */function getRandomArr(studentId, problemId, max) {  var arr = [];  var target = [];  for (let i = 0; i < max; i++) arr.push(i);  for (let i = 0; i < max; i++) {    let seed = (studentId * studentId + problemId * problemId) % arr.length;    // swap    let temp = arr[seed];    arr[seed] = arr[arr.length - 1];    arr[arr.length - 1] = temp;    target.push(arr.pop());  }  return target;}console.log(getRandomArr(123, 234, 4));console.log(getRandomArr(123, 234, 6));console.log(getRandomArr(123, 234, 10));console.log(getRandomArr(123, 235, 4));console.log(getRandomArr(123, 235, 6));console.log(getRandomArr(123, 235, 10));console.log(getRandomArr(124, 234, 4));console.log(getRandomArr(124, 234, 6));console.log(getRandomArr(124, 234, 10));

这里写图片描述

0 0
原创粉丝点击