我想制造一个不重复它已经发出的数字的数字生成器(C++)。
我只知道:
int randomgenerator(){
int random;
srand(time(0));
random = rand()%11;
return(random);
} // Added this on edition
这个函数给了我多余的数字。
我试图创建一个问卷程序,以随机的顺序给出10个问题,我不希望任何问题再次出现。
有人知道语法吗?
发布于 2011-03-21 18:41:24
我要做的是:
编辑:我不知道这些问题是如何存储的,所以..。:)
我假设这些问题是存储在一个矢量或一些随机访问。现在我已经生成了10个不重复的随机数: 7,4,12,17,1,13,9,2,3,10。
我会用这些指标来表示问题的向量:
std::vector<std::string> questions;
//fill with questions
for(int i = 0; i < number_of_questions; i++)
{
send_question_and_get_answer(questions[i]);
}
发布于 2011-03-21 18:38:52
你试图用“错误的方法”解决这个问题。
尝试这样做(假设您有一个带有问题ids的vector<int>
,但是相同的想法将适用于您拥有的任何东西):
发布于 2011-03-21 18:39:28
听起来你本质上想要洗牌 (在本例中,“卡片”是问题或问题号)。
在C++中,我会这样做:
#include <vector>
#include <algorithms>
std::vector<int> question_numbers;
for (unsigned int i = 0; i < 10; ++i)
question_numbers.push_back(i+1);
std::random_shuffle(question_numbers.begin(), question_numbers.end());
// now dole out the questions based on the shuffled numbers
你不需要发所有的问题,就像你每次玩游戏时都要发一整副牌一样。你当然可以,但没有这样的要求。
https://stackoverflow.com/questions/5382037
复制相似问题