Pular para o conteúdo

Vetor de números aleatórios não-repetidos de um intervalo em C

Este programa cria um vetor unidimensional de tamanho N e preenche-o por completo com números no intervalo de 1 até N sem repetir um número já inserido na próxima inserção.

Ele tenta gerar um número aleatório, verifica se este já está escrito, caso não esteja ele insere e procura valores para a próxima posição, senão ele gera outro valor e reprocessa com o teste.

Para se observar se houve alguma repetição, pode se observar a saída do seguinte comendo:
$ ./alea001 | sort -n --key=2

A título de exemplo foi escolhido o valor 52 por causa do baralho tradicional ter 52 cartas.

Para valores pequenos observa-se diretamente se houve repetições.

Ainda não encontrei falhas, o que significa que não possa havê-las.
Perfil removido removido
Hits: 14.662 Categoria: C/C++ Subcategoria: Introdução
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Este programa cria um vetor unidimensional de tamanho N e preenche-o por completo com números no intervalo de 1 até N sem repetir um número já inserido na próxima inserção.

Ele tenta gerar um número aleatório, verifica se este já está escrito, caso não esteja ele insere e procura valores para a próxima posição, senão ele gera outro valor e reprocessa com o teste.

Para se observar se houve alguma repetição, pode se observar a saída do seguinte comendo:
$ ./alea001 | sort -n --key=2

A título de exemplo foi escolhido o valor 52 por causa do baralho tradicional ter 52 cartas.

Para valores pequenos observa-se diretamente se houve repetições.

Ainda não encontrei falhas, o que significa que não possa havê-las.
Download alea001.c Enviar nova versão

Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>

// Para testar se não há números repetidos, usar por exemplo:
// ./alea001 | sort -n --key=2



#define VALOR   52

int main (void) {

   int i, j, k;
   int vec[VALOR];
   float n=VALOR;

   i = 0;
   while (i<VALOR) vec[i++] = -1;

   srand((unsigned int)time((time_t *)NULL));

   i = 0; j = 0;
   while (i<n) {

      j = 1 + (int) (n * ((float)rand()/(float)INT_MAX));

      k = 0;
      while (k<=i && vec[k++]!=j);

      if (k==i+1) vec[i++] = j;

   }

   i = 0;
   while (i<VALOR) printf ("%u\t%u \n", i, vec[i++]);

//   putc('\n',stdout);

   return 0;

}

Introdução a C

Validador de Cartão de Credito

Hello world 3

brincando com caracteres

Calculadora simples

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.