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.515 ]
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;
}
Número Quadrado perfeito e capicúa
Manipuladores de bases numéricas
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Ativando e usando "zoom" no ambiente Cinnamon
Vídeo Nostálgico de Instalação do Conectiva Linux 9
Como realizar um ataque de força bruta para desobrir senhas?
existe algum hub de jogos online similiar ou igual dos browser (6)
Como botar o efeito de deslocar janelas (win + setas - windows) no lin... (0)
Thinkpads são bons mesmo ?! (3)
Eu queria adicionar a incon do wifi e deixa transparente no fluxbox no... (2)









