Função Rand, números aleatórios

3 respostas
c
L
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
	int caixa[101] = {
	-50, -49, -48, -47, -46, -45, -44, -43, -42, -41,
	-40, -39, -38, -37, -36, -35, -34, -33, -32, -31,
	-30, -29, -28, -27, -26, -25, -24, -23, -22, -21,
	-20, -19, -18, -17, -16, -15, -14, -13, -12, -11,
	-10, -9, -8, -7, -6, -5, -4, -3, -2, -1,
	0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
	10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
	20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
	30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
	40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50
	};
	int vetA[101], i;
	srand(time(NULL));
	
	for(i = 0; i < 101; i++){
		vetA[i] = rand() % caixa[100];
		printf("Pos - %d\nNumero sorteado: %d\n", i, vetA[i]);
	}
}

Como eu poderia fazer para assim que ele recebesse um valor X o mesmo fosse removido de dentro do meu array? De forma que gerasse outro número que ainda não exista dentro espaço para não haver repetição.

3 Respostas

Viniciusog

Tenho este exemplo bem simples para você

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class VetorDeNumerosAleatorios {
	public static void main(String[] args) {
		Scanner te = new Scanner(System.in);

	System.out.print("Tamanho do vetor ");
	int tamanho = te.nextInt();

	List<Integer> valores = new ArrayList<>();
	Random random = new Random();
	
    //Adiciona os valores na lista
	int i = 0;
	while(valores.size() < tamanho) {
		System.out.println((i + 1) + "º valor");
		valores.add(te.nextInt());
		i++;
	}

	while (valores.size() > 0) {
		//Sorteia um número que pode ir de 0 até o tamanho máximo da lista
		int rand = random.nextInt(valores.size());
		//Em seguida pega da lista o valor que corresponde a posição sorteada
		System.out.print(valores.get(rand) + " ");
		//Feito isso retira da lista o valor da posição sorteada, para que não repita números
		valores.remove(rand);
	}
}

}

Viniciusog

Este que mandei é em java, mas pode te ajudar

L

Eu tentei e construí algo assim, sinto que está no caminho certo porque para o primeiro valor ele compara se no resto do vetor ele repetir terei outro número gerado, mas para o segundo espaço e os demais não é feito o mesmo.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
	int vetA[101];
	int i = 0, j, pos, cont = 0;
	srand(time(NULL));
	
	for(i = 0; i < 15; i++){
		vetA[i] = rand() % 100 - 50;
		printf("%d - Num Sort: %d\n", i, vetA[i]);
	}
	do{
		//i = 0;
		for(j = 0; j < 15; j++){
		pos = vetA[i];
		printf("Pos: %d\n", pos);
		for(i = 15; i > 0; i--){
			if(pos == vetA[i]){
				printf("Entrei e contei\n");
				vetA[i] = rand() % 100 - 50;
				cont++;
			}
			else cont = 1;
		}
		//i++;
	}
	cont = 0;
	} while(cont > 0);
	printf("\n");
	for(i = 0; i < 15; i++){
		printf("%d - Num Sort: %d\n", i, vetA[i]);
	}
	printf("Pos: %d", pos);
}
Criado 9 de maio de 2019
Ultima resposta 9 de mai. de 2019
Respostas 3
Participantes 2