Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leek100

Números aleatórios sem repetição

Recommended Posts

Boa noite galera

Ja estou com este progama pronto:

 

Porém preciso que os numéros da ultima matriz de 10x100 (Linha x Coluna) que varia de 0 à 9, nao se repitam na mesma Linha.
Os numeros na coluna podem repetir.

 

 

int main(int argc, char *argv[]) {
srand(time(NULL));
struct rotas{
int cod;
float px,py;
};
struct rotas pontos [10];
int a,lin,col;
float dist[10][10];
for(a=0;a<10;a++){
pontos[a].cod=a;
pontos[a].px=rand()%361;
pontos[a].py=rand()%361;
//scanf("%f",&pontos[a].px);
//scanf("%f",&pontos[a].py);
}
for(a=0;a<10;a++){
printf("cod: %d",pontos[a].cod);
printf(" px: %7.2f",pontos[a].px);
printf(" py: %7.2f \n",pontos[a].py);
}
printf("\n");
for(lin=0;lin<10;lin++){
for(col=0;col<10;col++){
dist[lin][col]=sqrt(pow(pontos[lin].px-pontos[col].px,2)+pow(pontos[lin].py-pontos[col].py,2));
}
}
for(lin=0;lin<10;lin++){
for(col=0;col<10;col++){
printf("%7.2f",dist[lin][col]);
}
printf("\n");
}
printf("\n");
struct registro{
int individuo[10];
float valor;
};
struct registro populacao[100];
int b, k, controle[10];
for(a=0;a<100;a++){
populacao[a].valor=0;
// for(k=0;k<10;k++){
// controle[k]=0;
// }
for(b=0;b<10;b++){
populacao[a].individuo=rand()%10;
printf("%d ",populacao[a].individuo);
if(b>0){
populacao[a].valor = populacao[a].valor + dist[populacao[a].individuo[b-1]][populacao[a].individuo];
}
}
printf(" %8.2f",populacao[a].valor);
printf("\n");
}
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia

 

O que você tem que fazer, é criar um array e inserir os valores já utilizados la dentro.

 

Quando gerar um número rândomico, você faz um loop dentro deste array e verifica se o número está la dentro, se sim, gere o número novamente, se não, você armazena no número no array e continua com o código.

 

Seu loop editado com o array:

for (a = 0; a < 100; a++)
{
	populacao[a].valor = 0;
	// for(k=0;k<10;k++){
	// controle[k]=0;
	// }
	for (b = 0; b < 10; b++)
	{
		int usados[10]; // armazena os números utilizados
		for (;;) // cria um loop infinito até gerar um número não repetido
		{
			populacao[a].individuo[b] = rand() % 10;

			// verifica se já foi utilizado
			bool utilizado = false;
			for (int i = 0; i < b; ++i)
			{
				if (usados[i] == populacao[a].individuo[b])
					utilizado = true;
			}

			if (!utilizado)
			{
				usados[b] = populacao[a].individuo[b]; // armazena no array
				break; // sai do loop
			}
		}

		printf("%d  ", populacao[a].individuo[b]);
		if (b > 0)
		{
			populacao[a].valor = populacao[a].valor + dist[populacao[a].individuo[b - 1]][populacao[a].individuo[b]];
		}
	}
	printf("  %8.2f", populacao[a].valor);
	printf("\n");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.