[C++] Gerar numeros aleatórios não consecutivos (3, 7, 11, 15...)

Olá galera!

Estou com uma dúvida em C++, queria saber como eu faço pra gerar numeros aleatórios que não estejam num intervalo consecutivo, por exemplo, caso eu queira imprimir um numero aleatório que seja par (sem precisar verificar toda vez se (numero % 2 == 0)), ou então um número do conjunto {7, 13, 19, 25, 31} (salto de 6 unidades…).

Como eu faço isso usando as bibliotecas padrão do C++ ( que tem as funções ‘rand()’ e ‘srand()’ e que tem ‘time()’)?

p.s.: eu sei como se faz pra gerar numeros aleatórios de um conjunto com elementos consecutivos (3, 4, 5, 6, … , n)… :wink:

Se o intervalo tiver poucos valores, você põe esses valores em um vector<int> e usa shuffle (um método de <algorithm> ) e pega apenas os primeiros N valores.

Se o intervalo tiver poucos buracos, a maneira mais simples é ir obtendo os números até achar um que esteja no tal intervalo.

Se for só números ímpares, sorteie um número qualquer (com rand), e então multiplique-o por 2 e some com 1. O resultado será sempre um número ímpar.

[quote=thingol]Se o intervalo tiver poucos valores, você põe esses valores em um vector<int> e usa shuffle (um método de <algorithm> ) e pega apenas os primeiros N valores.

Se o intervalo tiver poucos buracos, a maneira mais simples é ir obtendo os números até achar um que esteja no tal intervalo.

Se for só números ímpares, sorteie um número qualquer (com rand), e então multiplique-o por 2 e some com 1. O resultado será sempre um número ímpar.
[/quote]

hummmmmm…

Mas e se eu quiser criar um conjunto apenas dizendo qual o primeiro elemento, a quantidade de elementos do conjunto e a diferença pra cada elemento.

Por exemplo:
primeiro elemento: 4
numero de elementos: 4
salto: 3

CONJUNTO: {4, 7, 10, 13}

Tenho como fazer isso?

Você nos deu uma fórmula (3 x + 4, onde x vai de 0 a 3), então é só gerar um número aleatório de 0 a 3, e então passar para a tal fórmula. OK?

[quote=thingol][quote]
primeiro elemento: 4
numero de elementos: 4
salto: 3
[/quote]

Você nos deu uma fórmula (3 x + 4, onde x vai de 0 a 3), então é só gerar um número aleatório de 0 a 3, e então passar para a tal fórmula. OK?[/quote]

:lol:

hehe… eh verdade… de qualquer forma… valeu cara!

abraço!