隨機不同的數


需要從一個原始數據源(長度m,每個數不同)里隨機出n個不同的數(n<=m)
1     vector<int> rand_num_src;
2     for (int i = 1; i <= 20; ++i)
3     {
4         rand_num_src.push_back(i);
5     }
6     
7     int m = (int)rand_num_src.size();
8     int n = 10;

寫法一:

每隨機出一個新的數,需要跟已經隨機出來的數作比較,來保證每個數不同。但是while(true)始終是個危險的寫法。

 1     vector<int> index_1;
 2     for (int i = 0; i < n; ++i)
 3     {
 4         while(true)
 5         {
 6             int ram_num = rand() % m + 1;
 7             bool sign = false;  
 8             for (int j = 0; j < (int)index_1.size(); j++) 
 9             {  
10                 if (index_1[j] == ram_num) 
11                 {                     
12                     sign = true;  
13                     break;                    
14                 }          
15             }  
16             if (!sign)
17             {  
18                 index_1.push_back(ram_num);
19                 break;
20             }
21         }
22     }

寫法二:

用一個新的vector記錄數據源,隨機出一個數,則把它從這個vector中去掉。下一次從這個新的vector中隨機,這樣同樣保證每個數不同。

 1     vector<int> index_2;
 2     vector<int> random_list;
 3 
 4     for (int i = 0; i < m; ++i)
 5     {
 6         random_list.push_back(rand_num_src[i]);
 7     }
 8 
 9     for (int i = 0; i < n; ++i)
10     {
11         int rand_num_index = rand() % (int)random_list.size();
12         index_2.push_back(random_list[rand_num_index]);
13         random_list.erase(random_list.begin() + rand_num_index);
14     }



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com