Ali King X
Ali King X

Reputation: 1

Generating a sequence of different numbers

I am trying to generate a sequence of 6 random numbers with all the numbers being different from each other(no repetition of the numbers). But when I try to test whether I have successfully generated those numbers or not by trying to print them out, the code compiles successfully but nothing appears on the screen. Something seems to be wrong with my use of the function erase() because once I remove it the code produce some output although not what I am looking for.

#include<bits/stdc++.h>
#include<time.h>

using namespace std;
int main(void)
{
    srand(time(NULL));
    vector<int>v;
    vector<int>V;
    int arr[6];
    int i,j;
    for(i=1;i<=6;i++)
    {
        V.push_back(i);
    }
    
    for(int i=0;i<6;i++)
    {
        cout<<V[i]<<" ";
    }
    for(int i=0;i<6;i++)
    {
       int n=rand()%6;
       v.push_back(V[n]);
       V.erase(V.begin()+n);
    }
    cout<<endl;
    for(int i=0;i<6;i++)
    {
       cout<<V[i]<<" ";
    }
    return 0;
}

Upvotes: 0

Views: 181

Answers (2)

Dominique
Dominique

Reputation: 17493

You are using a wrong algorithm:

  • Generate six random numbers
  • If there are some which are equal, do something.

This is better:

  • Make a full list of all possible numbers.
  • Take random a number out of that list and remove it from the list. Do this six times.

Upvotes: 3

Caleth
Caleth

Reputation: 62694

You should use std::shuffle to re-order your numbers

#include <vector>
#include <iostream>
#include <random>
#include <algorithm>
#include <numeric>

void print_numbers(const std::vector<int> & numbers) {
    for (int number : numbers) {
        std::cout << number << " ";
    }
    std::cout << std::endl;
}

int main() {
    std::vector numbers(6);
    std::iota(numbers.begin(), numbers.end(), 1);
    print_numbers(numbers);
    std::random_device rd; // ok for small quantities like this, generally prefer a std::default_random_engine with some seed
    std::shuffle(numbers.begin(), numbers.end(), rd);
    print_numbers(numbers);
}

Upvotes: 1

Related Questions