fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. #include<unordered_set>
  5. #include<vector>
  6. #include<utility>
  7. #include<algorithm>
  8. using namespace std;
  9.  
  10. int main() {
  11. int n;
  12. int intervalo;
  13. printf("GERADOR DE N NÚMEROS ALEATÓRIOS\n");
  14. printf("Digite o número máximo do intervalo: ");
  15. scanf("%d", &intervalo); //Lê o intervalo máximo proposto pelo usuário.
  16.  
  17. printf("Intervalo proposto: [1 a %d]\n\n", intervalo); //Mostra na tela o intervalo proposto pelo usuário.
  18.  
  19. printf("Digite quantos números aleatórios e diferentes deseja gerar: ");
  20. srand(time(NULL)); //Complementa o comando rand. Toda vez que executar o programa, os números gerados não estejam na mesma sequência que anteriormente.
  21. scanf("%d", &n); //Lê a quantidade de números que serão mostrados na tela
  22.  
  23.  
  24. printf("\n--------\nVersão 1\n--------\n");
  25.  
  26. std::unordered_set<int> numbers;
  27. for(int i=1; i<=n; i++) { // Coemça o intervalo em i, e mostra a quantidade de números até chegar em "n" que representa o intervalo proposto pelo usuário.
  28. int number = 1 + (rand() % intervalo);
  29. bool inseriu = numbers.insert(number).second;
  30. if (inseriu) {
  31. printf("%dº número: %d\n",i, number); //Aqui é onde é imprimido na tela o número aleatório gerado, entretanto, ele precisa ser diferente do número anterior gerado.
  32. } else {
  33. printf("\t*%d é um número repetido, tentando novamente\n", number);
  34. i--;
  35. }
  36. }
  37.  
  38. printf("\n--------\nVersão 2\n--------\n");
  39.  
  40. std::vector<int> numbers2(intervalo);
  41. std::iota(numbers2.begin(), numbers2.end(), 1);
  42. std::random_shuffle(numbers2.begin(), numbers2.end());
  43. for (int i=0; i<n; i++) {
  44. printf("%dº número: %d\n",i+1, numbers2[i]);
  45. }
  46.  
  47. return 0;
  48. }
Success #stdin #stdout 0s 3420KB
stdin
10
9
stdout
GERADOR DE N NÚMEROS ALEATÓRIOS
Digite o número máximo do intervalo: Intervalo proposto: [1 a 10]

Digite quantos números aleatórios e diferentes deseja gerar: 
--------
Versão 1
--------
1º número: 9
2º número: 6
3º número: 2
	*2 é um número repetido, tentando novamente
	*2 é um número repetido, tentando novamente
	*9 é um número repetido, tentando novamente
4º número: 7
5º número: 1
6º número: 5
7º número: 10
8º número: 3
	*6 é um número repetido, tentando novamente
	*1 é um número repetido, tentando novamente
	*6 é um número repetido, tentando novamente
	*2 é um número repetido, tentando novamente
	*7 é um número repetido, tentando novamente
	*6 é um número repetido, tentando novamente
9º número: 4

--------
Versão 2
--------
1º número: 3
2º número: 9
3º número: 5
4º número: 8
5º número: 7
6º número: 1
7º número: 2
8º número: 10
9º número: 4