• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czemu nic się nie wyświetla. Powinno wypisywać wszystkie możliwości wypisania liczb od 1 do 3 bez powtorzeń.

0 głosów
953 wizyt
pytanie zadane 10 stycznia 2023 w C i C++ przez Franciszek Kuźnicki Nowicjusz (120 p.)

Wyświetlić powinno coś takiego:

1 2 3

3 2 1

1 3 2

3 1 2

2 1 3

2 3 1

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

using namespace std;

void losbezpow(int tab[], int n)
{
    srand(time(NULL));

    int i, j, x;
    bool jest=false;

    tab[0] = rand() % n + 1;

    for (i = 1; i < n; i++)
    {
        jest = false;
        x = rand() % n + 1;
        for (j = 0; j < i; j++)
        {
            if (x == tab[j])
            {
                jest = true;
                i--;
            }
        }
        if (jest == false)
        {
            tab[i] = x;
        }
    }
}

int main()
{
    int n = 3;
    int tab[n][6];

    for (int i = 0; i < 6; i++)
    {
        losbezpow(tab[i], n);
    }

    for (int i = 0; i < 6; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << tab[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

 

2 odpowiedzi

+3 głosów
odpowiedź 10 stycznia 2023 przez tangarr Mędrzec (155,120 p.)

Twoja tablica ma wymiary 3x6. Twoja pętla losująca dane próbuje używać tablicy 6x3.

    int n = 3;
    int tab[n][6];
 
    for (int i = 0; i < 6; i++)
    {
        losbezpow(tab[i], n);
    }

Dlatego wyskakujesz poza tablicę i piszesz po innej pamięci (stos funkcji main, nadpisujesz zmienne lokalne, w tym zmienną i).

komentarz 10 stycznia 2023 przez Franciszek Kuźnicki Nowicjusz (120 p.)
Nie bardzo rozumiem o co chodzi w tym nawiasie:

(stos funkcje main...zmienną i)

byłbym bardzo wdzięczny gdybyś wytłumaczył.
komentarz 10 stycznia 2023 przez tangarr Mędrzec (155,120 p.)
+1 głos
odpowiedź 10 stycznia 2023 przez Great Stary wyjadacz (12,660 p.)

Odpowiedź już padła, ale mógłbyś wygenerować wszystkie permutacje zbioru {1, 2, 3} (std::next_permutation) i następnie je losowo przemieszać (std::shuffle). Przykład kodu w C++20:

#include <iostream>
#include <algorithm>
#include <vector>
#include <random>

int main() {
    std::vector nums{1, 2, 3};
    std::vector permutations(1, nums);
    while (std::ranges::next_permutation(nums).found) {
        permutations.push_back(nums);                 } 

    std::default_random_engine gen{ std::random_device{}() };
    std::ranges::shuffle(permutations, gen);

    for (const auto& permutation : permutations) {
        for (const auto& num : permutation) {
            std::cout << num << " ";
        }   std::cout << "\n";
    }
}

Podobne pytania

0 głosów
1 odpowiedź 905 wizyt
0 głosów
2 odpowiedzi 6,639 wizyt
pytanie zadane 22 kwietnia 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)
0 głosów
1 odpowiedź 396 wizyt
pytanie zadane 29 kwietnia 2016 w C i C++ przez Dynamic Bywalec (2,910 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,371 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...