Problem z losowaniem liczb bez powtorzen

0

Witam! Mam taki kod:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int wczytajLiczby( int tab[], int ile)
{
	cout << "Podaj 3 liczby. \n ";

	do
	{

		for( int i = 1; i <=3; i++ )
		{
			cout << "Podaj liczbe " << i << ": ";
			cin >> tab[ ile ];  // uzytkownik podaje 3 liczby, ktore sa zapisywane do tablicy
			ile++;
		}

	} while ( ile < 3 );

	return 0;

}

int wylosujLiczby( int tablica[])
{
	int i = 0;

	do
	{
		tablica[ i ] = ( rand() % 2 ) + 0;
		i++; // funkcja ta losuje liczby, ktore beda indeksami do tablicy z liczbami wpisanym przez uzytkownika
	} while ( i < 2 );

	return true;
}

int main()
{
	srand( time( NULL ) );

	int ile = 0;
	int wylosowane[ 3 ];
	wczytajLiczby( wylosowane, ile );

	int losowe_indeksy[ 2 ];
	wylosujLiczby( losowe_indeksy );

	for( int i = 0; i < 2; i++)
	{
		cout << wylosowane[ losowe_indeksy[ i ] ] << endl;
	}

	system("PAUSE");
    return 0;
}


Jest to program, który losuje 2 liczby z 3 podanych przez użytkownika.Chciałbym aby funkcja wylosujLiczby losowała bez powtórzeń, ale nie wiem jak to zrobić. Czy ktoś mógłby mi coś podpowiedzieć w jaki sposób mam to zrobić ? Z góry dziękuję za pomoc.

1

sposobów jest wiele. Dla Ciebie najprostszy sposób chyba będzie coś takiego (żebyś poćwiczył algorytmy)
masz tablice (czy jaki kolwiek inny kontener)

UnikatoweLiczby

wylosowaną liczbę sprawdzasz czy nie ma jej w UnikatoweLiczby. Jeżeli nie ma. To ją tam wpisujesz. Jeżeli jest to zmniejszasz licznik pętli (by wylosowało tyle liczb losowych ile chcesz) i nie wpisujesz do tablicy.

polecam zrezygnować z system("pause"). Konsola ma się sama zatrzymać. A także zapoznać się z kontenerem vector.
Po co robisz coś takiego "+ 0 " przeciez to nie ma sensu...

Nie patrzyłem na kod, tylko dałem Ci jakiś tam pomysł po czym spojrzałem na kod. Powiem Ci, że chyba pierwszy raz spotykam się z czymś takim

wylosowane[ losowe_indeksy[ i ] ] 

Po co tak? da się to zrobić dużo prościej
Ogólnie jakiś dziwny jest ten program.

3

Jak masz wylosować dwa elementy z trzech bez powtórzeń to wylosuj jeden i go odrzuć.

        wczytajLiczby( wylosowane, ile );
        int out=rand()%3;
        for(int i=0;i<3;++i) if(i!=out) cout<<wylosowane[i]<<endl;

1 użytkowników online, w tym zalogowanych: 0, gości: 1