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.357 ]
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; }
Multiplicação de matrizes com indireção múltipla
Nenhum coment�rio foi encontrado.
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Como gerar um podcast a partir de um livro em PDF
Organizando seus PDF com o Zotero
Erro no realm join [Resolvido]
Um programa para baixar vídeos: Parabolic
Como Definir o Painel Principal em Múltiplos Monitores no Linux Mint
BlueMail não abre no Kubuntu 25.04 (8)
Não consigo montar meu cartão SD (6)
Sempre que vou baixar algum pacote acontece o erro dpkg (4)
aplicativos criados com webapp-manager não aparecem no menu do xfce (1)