Ok. Pomijając fakt że co do rand(), wszyscy obecnie mają jak najgorsze zdanie (i słusznie), pomijając także fakt że masz od tego już gotowy algorytm w bibliotece standardowej C++ ( https://en.cppreference.com/w/cpp/algorithm/random_shuffle ), rozumiem że masz to zrobić ręcznie i koniecznie rand(...) bo "tak kazali".
No to:
1. Generujesz talię.
2. Przepisujesz wygenerowaną talię do kontenera wynikowego (1:1).
3. Przechodzisz od pierwszego elementu do ostatniego zamieniając go z innym losowym z całego zakresu kontenera.
No to wersja za którą pochwalą "że dobrze" a jest "nie bardzo".. choć już coś poprawione:-/:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
srand(time(NULL));
int talia[54];
int taliaP[54];
// Generowanie talii
for(int n = 0; n < 54; ++n)
{
talia[n] = n + 1;
}
// Kopiowanie talii do docelowej
for(int n = 0; n < 54; ++n)
{
taliaP[n] = talia[n];
}
// Tasowanie talii
for(int n = 0; n < 54; ++n)
{
int result_index = rand() % 54;
int tmp = taliaP[result_index];
taliaP[result_index] = taliaP[n];
taliaP[n] = tmp;
}
// Wyświetlenie potasowanej talii
for(int n = 0; n < 54; ++n)
{
std::cout << taliaP[n] << ' ';
}
std::cout << '\n';
return 0;
}
Uwagi:
1. Dlaczego indeksy są ze znakiem? Czy ma sens użycie indeksów ujemnych?
2. Dlaczego pierwotnie w pętlach jest postinkrementacja? Po co kazać kompilatorowi trzymać starą wartość jeśli nie będzie użyta?
3. Dlaczego jest wartość magiczna 54? Co ona oznacza?
4. Dlaczego nie ma funkcji tylko "tłumaczenie co robi kawałek kodu"? To funkcja ma tłumaczyć.
5. Po co return 0 z main(...) kiedy w C++ od dawna wiadomo że jak nie ma return w main(...), to sam kompilator wygeneruje zwrócenie 0?
No ale co do pretensji, sam się ustosunkuj :)