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.
Tvůrce
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Určite prídem na to, ako to riešiť, len nechcem hľadať niečo, čo už je vymyslené.
je povolen vícenásobný výskyt čísla? (32223)
Aj ked by mozno mohlo byt riesenim to pouzit s vylucenim opakovania, ale to by asi bola potreba vela casu.
Schvalne si to vyskusaj, ak mas cas. Nie je to asi az tak jednoduche.
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;
}
Diky, myslel som si, ze to niekto riesil.
Prvacka uloha?
Ak je toto prvacka, potom co je druhacka?
Dakujem za riesenie.
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
Zobrazeno 12 zpráv z 12.