NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: všetky kombinácie 5 číslic v rozsahu 0-9

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Libor Šimo (libcosenior):19.3.2017 10:50

Snažím sa riešiť jednu úlohu a dostal som sa do situácie, že mám problém vytvoriť pole (stringov) všetkých kombinácií 5 číslic v rozsahu 0-9.
Verím tomu, že to už niekto riešil, preto sa tu pýtam. ;-)

Odpovědět
19.3.2017 10:50
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):19.3.2017 11:13

Určite prídem na to, ako to riešiť, len nechcem hľadať niečo, čo už je vymyslené.

Nahoru Odpovědět
19.3.2017 11:13
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
HONZ4
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
HONZ4:19.3.2017 11:48

je povolen vícenásobný výskyt čísla? (32223)

 
Nahoru Odpovědět
19.3.2017 11:48
Avatar
HONZ4
Člen
Avatar
HONZ4:19.3.2017 11:53

Pokud ano, stačil by výpis čísel 0 - 99999 a převod na string.

Editováno 19.3.2017 11:54
 
Nahoru Odpovědět
19.3.2017 11:53
Avatar
Odpovídá na HONZ4
Libor Šimo (libcosenior):19.3.2017 12:14

Jasne ze nie. Bez opakovania.

Nahoru Odpovědět
19.3.2017 12:14
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):19.3.2017 12:17

Aj ked by mozno mohlo byt riesenim to pouzit s vylucenim opakovania, ale to by asi bola potreba vela casu.

Nahoru Odpovědět
19.3.2017 12:17
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na HONZ4
Libor Šimo (libcosenior):19.3.2017 12:18

Schvalne si to vyskusaj, ak mas cas. Nie je to asi az tak jednoduche.

Nahoru Odpovědět
19.3.2017 12:18
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:19.3.2017 12:45

Tohle už řešil skoro každý, protože je to typická prvácká úloha :-)
Jestli moje řešení nesplňuje přesné zadání, tak aspoň najdeš inspiraci a uvidíš, že to není až tak těžké.

#include <stdio.h>

void generate(int k, int n, char *text, char *test) {
    if (k == n) {
        text[n] = 0;
        printf("%s\n", text);
        return;
    }

    for (int i = 0; i < 10; i++) {
        if (!test[i]) {
            text[k] = i + '0';
            test[i] = 1;
            generate(k + 1, n, text, test);
            test[i] = 0;
        }
    }
}

int main() {
    char text[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    char test[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    generate(0, 5, text, test);

    return 0;
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
19.3.2017 12:45
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):19.3.2017 12:50

Diky, myslel som si, ze to niekto riesil.
Prvacka uloha?

Editováno 19.3.2017 12:51
Nahoru Odpovědět
19.3.2017 12:50
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):19.3.2017 12:55

Ak je toto prvacka, potom co je druhacka?

Nahoru Odpovědět
19.3.2017 12:55
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):19.3.2017 12:57

Dakujem za riesenie.

Nahoru Odpovědět
19.3.2017 12:57
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:19.3.2017 13:07

Stejné řešení můžeš upravit, aby tam nebyla pole a toho využít ke generování všech variací.
Tak dostaneš 1 číslici, 2 číslice, 3 číslice, atd., ale není to hezké řešení na ukázku postupu.

#include <stdio.h>

void generate(int n, int acc) {
    if (!n) {
        printf("%d\n", acc);
        return;
    }

    for (int i = 0; i < 10; i++) {
        long t = acc;
        while (t && (t % 10) != i)
            t /= 10;
        if (!t)
            generate(n - 1, acc * 10 + i);
    }
}

int main() {
    generate(3, 0);

    return 0;
}

Druháci už tohle nepíšou a zavolají knihovnu, co to udělá sama ;-)

 
Nahoru Odpovědět
19.3.2017 13:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.