我在C ++中有一个包含100个元素的数组,所以v [1],...,v [100]包含数字。我如何显示这个数组中的25个随机数?所以我想从这个数组中选择25个随机位置并显示值。我怎样才能在C ++中做到这一点?
谢谢!
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <vector>
using namespace std;
int aleator(int n)
{
return (rand()%n)+1;
}
int main()
{
int r;
int indexes[100]={0};
// const int size=100;
//int a[size];
std::vector<int>v;
srand(time(0));
for (int i=0;i<25;i++)
{
int index = aleator(100);
if (indexes[index] != 0)
{
// try again
i--;
continue;
}
indexes[index] = 1;
cout << v[index] ;
}
cout<<" "<<endl;
system("pause");
return 0;
}
我的想法是,我有这个代码,并生成100个随机数。我想要的是一个数组,其中包含来自那些100个生成的随机25个元素..但我不知道该怎么做
此致
答案 0 :(得分:3)
简答
使用std::random_shuffle(v.begin(),v.end())来混洗数组,然后显示前25个元素。
长答案
首先,元素将是v [0] ... v [99](C ++使用基于0的索引),而不是v [1] ... v [100]。但是,要回答你的问题,这取决于重复数组的元素是否可以接受。如果您不担心重复,那么只需重复使用索引rand()%v.size()
,直到您选择了足够数量的索引(问题中为25)。如果重复是不可接受的,那么你需要对数组进行混洗(通过随机交换元素),然后显示N个元素的第一个(或最后一个或任何连续区域)(在这种情况下N = 25)。您可以使用std::random_shuffle来重新排列数组。这为你完成了大部分工作。完成后,只显示25个元素。
答案 1 :(得分:1)
如果要打印25个数组V,可以使用此代码执行:
int V[100]={1,2,5,...} ;
srand ( time (0) ) ;
for (int i=0;i<25;i++)
{
cout << V[rand() % 100 + 1]<<" " ;
}
答案 2 :(得分:0)
我稍微修改了Mehdi的版本,以便选择不同的索引 注意:这使得算法不具有确定性 - 它依赖于RNG。
int indexes[100]={0};
srand ( time (0) );
for (int i=0;i<25;i++)
{
int index = rand() % 100;
if (indexes[index] != 0)
{
// try again
i--;
continue;
}
indexes[index] = 1;
cout << v[index] ; cout << endl;
}