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.319 ]
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.
#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; }
Função em C, retorna a data do sistema já formatada
Calcular a potência de um número.
Nenhum comentário foi encontrado.
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Descritores de Arquivos e Swappiness
Como instalar no Linux Jogos da Steam só para Windows
Instalando o Team Viewer no Debian Trixie - problema no Policykit
O Que Fazer Após Instalar Ubuntu 25.04