从数组中显示25个随机数

时间:2010-06-03 08:16:26

标签: c++ arrays

我在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个元素..但我不知道该怎么做

此致

3 个答案:

答案 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;
}