如何打乱一组数的顺序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何打乱一组数的顺序?相关的知识,希望对你有一定的参考价值。

这是一组随机生成的数字(非数组),共10个数字,有没有办法打乱随机他们的顺序,如果不行,将这10个数字排下序也行,之前想过用random,可是怎样也达不到效果,所以来请教各位。

方法一: 把这10个数字写成10个卡片,像洗扑克牌一样打乱,随便抽。

方法二:把这10个数编号,然后用random得到1到10之间的一个随机数n1,将编号为n1的的数排在第一,然后将剩余的9个数从1到9排序,用random得到1到9之间的一个随机数n2,将编号为n2的的数排在第二,依次类推。
参考技术A 如果你的程序使用php写的,倒有一个现成的函数可以实现这一功能。
例如你有一个数组
$numbers
//用shuffle 将数组顺序随即打乱
shuffle ($numbers);
就OK啦。

至于其他语言,没有仔细研究过,不敢乱发意见。

参考: http://www.luckynet.uzai.ca/programming/php/others/random.html

参考资料:http://www.luckynet.uzai.ca/programming/php/others/random.html

随机打乱一组数(出题)

 1 /*
 2 打乱一组数据a[0]~a[n-1]:
 3 给出0~n-1的编号,打乱这些编号,得到编号数组b[0]~b[n-1],
 4 现在的数据为a[b[0]],a[b[1]],…,a[b[n-1]]
 5 */
 6 #include <cstdio>
 7 #include <cstdlib>
 8 #include <cstring>
 9 #include <cmath>
10 #include <string>
11 #include <set>
12 #include <map>
13 #include <list>
14 #include <queue>
15 #include <vector>
16 #include <algorithm>
17 using namespace std;
18 const long n=100; //1e6
19 const long max_int=1<<15;//long 1<<15 ; unsigned long 1<<16
20 const long X=n/max_int+(n%max_int!=0);
21 const long Y=n%max_int;
22 
23 long a[n],x,y;
24 
25 int main()
26 {
27     FILE* fp=fopen("data.txt","w");
28     long i,j,index,t;
29     for (i=0;i<n;i++)
30         a[i]=i;
31     srand(0);
32     //每次确定a[i]的数值,index的数值是随机的,因而a[i]的数值也是随机的
33     //O(n)
34     for (i=n-1;i>=0;i--)
35     {
36         //分成两部分 v=max_int*x+y x=0..X-1 y=0..Y-1
37         index=floor(1.0*rand()/max_int*X) *max_int + floor(1.0*rand()/max_int*Y);
38         t=a[index];
39         a[index]=a[i];
40         a[i]=t;
41     }
42     for (i=0;i<n;i++)
43         fprintf(fp,"%ld ",a[i]);
44     fclose(fp);
45     return 0;
46 }

 

thanks for the help of a classmate

 

以上是关于如何打乱一组数的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

在C语言中,如何输出一组数的排列组合

[JS]求一组数的最小公倍数

C语言利用函数调用求一组数的最大值,最小值,平均数。。。。。。急。。。。

结构体-输出一组数的排名

c语言编程: 将一组数按从大到小的顺序排序

推断一组数的规律,并填充缺失的数