第 1 章 第 4 题 生成固定范围随机数问题

问题分析

  假若要产生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. 这其实也不是“真正”严格的随机数,世界上也找不到绝对的随机数,最接近的方法也要模拟核爆之类的。

原文地址:https://www.cnblogs.com/scut-fm/p/3242758.html