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

Publicado por Perfil removido (última atualização em 16/04/2012)

[ Hits: 14.208 ]

Download alea001.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.

  



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;

}

Scripts recomendados

Comando continue

Gerar senhas em C

Soma de números através de strings

Calculadora de I.M.C

Pares com stdlib


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts