1
leavebody 2023-11-09 16:30:11 +08:00
直接这样?
random.seed(num) |
2
makun123 2023-11-09 16:31:56 +08:00
自己定义一套根据 一个 int 值打乱的规则 就行吧
比如 输入 3 定义每遇到下标 len(array)%3 的倍数 和 array 首位 互换位置。嫌不够乱就多循环几次 每次 int 值 -1 |
3
murmur 2023-11-09 16:33:15 +08:00
看不懂你的题,但是这个不就是 shuffle 么,随便找一个实现看源码就可以了,但是看你需求还是给了种子之后 shuffle 结果唯一?
|
5
geelaw 2023-11-09 16:34:28 +08:00 via iPhone
首先你的描述很难读懂,不要用常见的模板/泛型参数的记号表达 type 的类型。
其次,这个题目是平凡的,如果不规定何种乱序才叫乱序,可以直接输出 array 本身。 最后,发挥数年浸淫在高考中的“解读出题人意图”的超能力,这个问题的意思大概是说 type 当作 Z/(n!) 的元素和长度为 n 的 array 的所有排列来个双射,你需要搜索的关键词是 reservoir sampling——假设 type 非负,每次令 type % i 为采样得到的随机数并把 type 替换为 floor(type / i) 并继续。搜索之后还不会再问。 |
6
zjsxwc 2023-11-09 16:36:52 +08:00
A(10,10) = 10! = 3628800 个全排序
你把 type<Int 类型>值对应到 3628800 以内的整数数字,里某个排序不就 ok 了 |