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.555 ]
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;
}
Escrevendo um arquivo Unicode em C#
Cálculo da equação do segundo grau
Calculo de Área e Diametro do circulo
Uma pequena "CALCULADORA" (apenas SOMA).
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Conky, alerta de temperatura alta (11)
Assisti Avatar 3: Fogo e Cinzas (3)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (42)









