我正在嘗試使用列印亂數srand。這是我的代碼。
我希望每個后續數字都比列??表中的前一個數字大 0-4。
這是我的代碼。
#include <iostream>
#include <ctime>
#include <cmath>
#include <random>
#include <vector>
#include <algorithm>
#include <climits> // for INT_MAX;
int main(){
srand((int)time(0));
std::vector<int> myVec;
int number = 5;
for(size_t index = 0; index <100; index ){
int result = (rand() % number) 1;
if((result % 5) == 0 or (result % 5 == 3 && index == 50)){
number = 2;
myVec.push_back(number);
}
}
for(int vec : myVec){
std::cout << vec << " ";
}
return 0;
}
我正在尋找的輸出是
0 2 4 6 9 12 以此類推
有人可以指導我如何實作它嗎?
uj5u.com熱心網友回復:
你應該能夠更簡單地寫這個。此外,您的代碼似乎沒有得到任何隨機值的原因是因為您用myVec.push_back(number). 你應該改為做myVec.push_back(result).
至于您的實際問題,您的代碼似乎并不是針對您要實作的目標而撰寫的。如果你想獲得比后續值大 0-4 的值,最好這樣寫:
#include <iostream>
#include <ctime>
#include <random>
#include <vector>
int main(){
srand(time(0));
std::vector<int> nums;
int lower = 0;
for(int i=0; i<100; i ) {
// generate random number from lower bound to upper bound
// starting lower bound is 0
nums.push_back((rand() % 5) lower);
lower = nums[nums.size()-1];
}
for(int num : nums){
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
所以,一般來說,如果一個隨機函式回傳任何值 x where 0 <= x < 1(我相信 C/C rand() 確實如此),那么要在給定范圍內獲取一個值,你希望它采用這種格式:
(rand() % (upper_bound - lower_bound 1)) lower_bound
但是,您說您希望所有值都比下限大 0-4。這意味著我們基本上想從我們的下限開始,并添加 0-4。所以真的,我們只需要從 0-4 生成一個亂數。rand() % 5上面的代碼rand() % N會回傳任何數字 x where 0 <= x < N。所以,我們想要rand() % 5得到從 0 到 4 的任意數字。
此外,這只是語意,但以我個人的經驗,嘗試并保持對變數命名的某種程度的推斷總是好的。在您撰寫的 for-each 回圈for(int vec : myVec)中,但乍一看,這可能看起來 myVec 實際上是一個向量,而 myVec 的每個元素本身就是一個向量。盡管int明確宣告了型別,但如果它的型別不是向量,開發人員為什么將其命名為“vec”仍然很容易混淆。再一次,其中一些歸結為偏好,如果這是針對個人專案、任務或實際生產代碼。但我會開始養成一個好習慣,確保有目的地命名事物。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464732.html
