我正在编写一个简单的脚本,从0到7生成8个随机值,并将它们存储到名为random_numbers
的数组中。
这是我的尝试:
int main(int argc, char** argv) {
int random_numbers[8];
srand((unsigned)time(NULL));
for (int i = 0; i < 8; i++) {
random_numbers[i] = 1+ rand() % 8;
cout << random_numbers[i] << endl;
}
return 0;
}
这给了我重复的价值。我希望random_numbers
填充从0到7的随机值,但没有任何重复的数字。
我该怎么做?
答案 0 :(得分:13)
生成数字0到7,然后将它们随机播放。假设这实际上是C ++,而不是C(因为cout
),请使用std::random_shuffle
:
#include <algorithm>
#include <cstdlib>
#include <iostream>
int main()
{
int a[8] = {0, 1, 2, 3, 4, 5, 6, 7};
std::srand(unsigned(std::time(0)));
std::random_shuffle(a, a + 8);
for (int i=0; i<8; i++)
std::cout << a[i] << " ";
std::cout << std::endl;
}
警告:cppreference.com states“随机数生成器是实现定义的,但经常使用函数std::rand
。”我用std::srand
播种了,但显然这不是完全可移植的。
答案 1 :(得分:1)
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
class Random {
public:
Random(){
srand( static_cast<unsigned int>(time(NULL)));
}
unsigned int operator()(unsigned int max){
double tmp = static_cast<double>( rand() ) / static_cast<double>( RAND_MAX );
return static_cast<unsigned int>( tmp * max );
}
};
int main(int argc, char** argv) {
int random_numbers[8];
int size = sizeof(random_numbers)/sizeof(int);
for(int i=0;i<size;++i)
random_numbers[i]=i;
Random r;
random_shuffle(random_numbers, random_numbers + size, r);
for (int i = 0; i < 8; i++) {
cout << random_numbers[i] << endl;
}
return 0;
}
答案 2 :(得分:1)
因为你使用c ++,所以我修改了你的代码。使用向量而不是数组,这应该会让你的生活更轻松,并且这会以随机顺序生成0-7而不会重复:
使用-std=c++0x
#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
using namespace std;
int main(int argc, char** argv) {
srand(time(NULL));
vector<int> random_numbers(8);
iota(random_numbers.begin(), random_numbers.end(), 1);
random_shuffle(random_numbers.begin(), random_numbers.end());
for (unsigned i = 0; i < random_numbers.size(); i++) {
cout << random_numbers[i] << endl;
}
return 0;
}
答案 3 :(得分:-1)
试试这段代码:
int random_numbers[8];
int main(int argc, char** argv) {
srand((unsigned)time(NULL));
for (int i = 0; i < 8; i++) {
random_numbers[i] =getRand(i);
cout << random_numbers[i] << endl;
}
return 0;
}
int getRand(int entries)
{
int flag = 0;
int randno ;
randno = rand() % 8;
for(int i=0;i<entries;i++)
{
if( random_numbers[i]==randno)
{
randno = rand() % 8;
continue;
}
}
return randno;
}