问题分析
假若要产生0 - 9范围内的无重复随机数字,可按照如下思路实现:
1. 定义存放10个整数元素的数组,其中每个元素的值为其下标值。
2. 遍历数组,让当前遍历位的元素和某个位( 随机产生 )的元素交换。
代码实现
1 #include <iostream> 2 #include <cstdlib> 3 4 using namespace std; 5 6 #define N 10 7 8 /* 9 * 交换数组元素 10 */ 11 void change(int &a, int &b) { 12 int temp; 13 temp = a; 14 a = b; 15 b = a; 16 } 17 18 int main() 19 { 20 int a[N]; 21 22 /* 23 * 给数组赋初值 24 */ 25 for (int i=0; i<N; i++) { 26 a[i] = i; 27 } 28 29 /* 30 * 遍历数组并完成随机交换 31 */ 32 srand( (unsigned)time( NULL ) ); 33 for (int i=0; i<N; i++) { 34 change (a[i], a[rand()%N]); 35 } 36 37 /* 38 * 打印产生的随机数结果 39 */ 40 cout << "无重复随机数如下: " << endl; 41 for (int i=0; i<N; i++) { 42 cout << a[i] << " "; 43 } 44 cout << endl; 45 46 return 0; 47 } 48
运行结果
说明
1. 本程序采用时间作为随机数种子,故每秒钟内最多执行一次,否则将会得到几组相同的随机数。
2. 这其实也不是“真正”严格的随机数,世界上也找不到绝对的随机数,最接近的方法也要模拟核爆之类的。