Código C++:
Ver original
#include<iostream> #include <cstdlib> using namespace std; void aleatoriosSinRepetir(){ int i=0;//contador para bucle. int ale;//números aleatorios que irán generándose. int auxiliar;//la utilizare para cambiar el valor de una variable por otra. int intervalo2=10;//máximo valor del intervalo para aleatorio. int intervalo=0;//mínimo valor del intervalo para aleatorio. int aleatorio[10]={1,2,3,4,5,6,7,8,9,10};//matriz con los diez números. //aleatorios a obtener for (i=0; i<10; i++){ auxiliar=aleatorio[i];//guardo en auxiliar aleatorio aleatorio[i]=aleatorio[ale];//introduzco el primer aleatorio en el indice //correspondiente. cout<<aleatorio[i]<<endl;//muestro primer aleatorio. aleatorio[ale]=auxiliar;//introduzco el aleatorio[i] ya que previamente lo metí //en auxiliar intervalo++;//a intervalo mínimo le sumo 1. intervalo2--;//a intervalo máximo le resto una. } } int main() { aleatoriosSinRepetir();//llamo a la funcion. }
La idea es ir leyendo de un array los indices de forma aleatoria e ir intercambiando el numero saliente por el primer indice luego el segundo numero saliente por el segundo ectr.. mientras acoto la posibilidad de que salgan los números anteriores restando le al intervalo uno cada vez, de forma que el numero aleatorio primero que se guarda en el indice primero ya no podrá salir mas, y asi sucesivamente.
pd: la función la he escrito sin consultarla con nadie ustedes son los primeros espero que si se puede mejorar se mejore entre todos.