Losowanie bez powtórzeń

0

Witam, męczę się już z tym zadaniem od 2 godzin i wciąż nie mogę wymyślić jak to zrobić. Szukałem w google, w przeglądarce forum, ale żadna odpowiedź mi nie pomogła( nie wiem, może jestem zbyt tępy ).

Zadanie :

  1. Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje.

Mój kod :

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
/*
1. Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy,
 a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran.
 Postaraj się napisać ten program w oparciu o funkcje.
*/

bool czyBylaWylosowana(int iLiczba, int tab[])
{
    int i = 0;
    do{
        if(tab[i] == iLiczba)
            return true;
        i++;
    }while(i < 3);

    return false;
}
int wczytaj(int tab[])
{
    for(int i=0;i<3;i++)
    cin >> tab[i];
}
int main()
{
    srand(time(0));
    int tab[3];
    int ile = 0;
    int i = 0;

    wczytaj(tab);

    do{
        if(czyBylaWylosowana(tab[i], tab)== false)
        {
            tab[i] = liczba;
            i++;
        }
    }while(i < 3);
    for(int i=0; i<3; i++)
    cout << (i+1)<<". "<< tab[i]<< endl;

    return 0;
}

 

Zdaję sobie sprawę że mój kod nie ma najmniejszego sensu ale nie mam pojęcia jak się do tego zabrać... Prosiłbym o jakieś wskazówki.

1

Zastanów się jak masz wylosować 2 z 3ch to na to samo wyjdzie jak wylosujesz jedną i ją wywalisz.

0

Możesz zrobić jak pisze @_13th_Dragon, ale w ogólniejszym przypadku możesz zrobić tak:

int arr[M];
// wczytywanie
std::random_shuffle(arr, arr + 3);
// Wypisujesz N początkowych liczb
0

A moze tak opcja szukaj ;) WIem ze ten temat byl poruszany kilkanascie razy na forum i znajdzie sie kilkanascie tematow z odpowiedziami.

0

najprościej będzie to zrobić za pomocą :
int index = rand % 3;
wylosowałeś indeks tablicy 3 elementowej od 0-2
Później wypisz tylko to tak : tab[index] gdzie tab to jest 3 elementowa tablica liczb podanych przez użytkownika
Tak powinno mniej więcej wyglądać możliwe ,że są błędy ale wydaje mi się ,że powino działać:

 
int tab[3];
for(int i = 0; i < 3; i++) {
    std::cin >> tab[i];
}

int index1;
int index2;
index1 = rand() % 3;
while((index2 = rand() % 3) == index1);

std::cout << tab[index1] << "\n" << tab[index2];
0

@robcio, czy to nie jest o wiele prostsze:

int tab[3];
for(int i=0;i<3;++i) std::cin>>tab[i];
for(int none=rand()%3,i=0;i<3;++i) if(i!=none) std::cout<<tab[i]<<std::endl;

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