Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
dobrý den
dělám si úlohy ze sbírky pana kryla a narazil jsem na par o kterych nemam ani paru jak je resit či jaký je vůbec algoritmus.
všechna k-ciferná čísla v jejichž dekadickém zápisu jsou všechny cifry různé jsme myšlenkově seřadili podle velikosti.
napište podprogram, který k zadanému číslu této vlastnosti spočte jeho pořadí.
a podobná úloha k zadanému pořadí určit příslušné číslo
děkuju
Offline

Napadlo me k tomu tohle: (jestli to stale potrebujes)
Kdyz budes postupovat od prvni cifry (s nejvyssi vahou), tak pro to prvni cifru mas vzdy 10 moznosti (0, 1, 2 ... 8, 9).
K prvni cifre dal budes hledat druhou cifru - tam je uz jen 9 moznosti, protoze jedna byla spotrebovana na 1 cifru. Takze kdyz cifru na 1. miste vynasobis 9, dostanes poradi toho dvojciferneho cisla za predpokladu, ze cifra na 2. miste je nejnizsi mozna. Cili kdyz 2. cifra nebude nejnizsi mozna, staci ji prictes ji k tomu poradi. Dal v pripade, ze je vyssi nez 1. cifra, musis jeste 1 odecist, protoze jedno cislo se vynechalo. Takhle dostanes poradi dvojciferneho cisla (indexovanho od 0). Podobne muzes postupovat az pro 10 cifer. Kdyz pridas 3. cifru, mas pro kazdou predchozi kombinaci dvou cifer 8 moznosti, cili puvodni dvojciferne poradi vynasobis 8. Prictes 3. cifru a odectes jedna kdyz je vetsi nez prvni a kdyz vetsi nez druha. A tak dale pro dalsi cifry. Nevim, jestli jsem to dobre vysvetlil a jestli jsou moje myslenky spravne. Kazdopadne tady jsem neco naprogramoval v C++ : (je to srozumitelnejsi nez ten text, rekl bych :-) )
int ZjistiPoradi(int Cifra[], int PocetCifer){
int Poradi, Nasobitel;
Poradi = 0;
Nasobitel = 10;
for (int Index = 0; Index < PocetCifer; Index ++){
Poradi *= Nasobitel;
Poradi += Cifra[Index];
Nasobitel -= 1;
for (int VnitrniIndex = 0; VnitrniIndex < Index; VnitrniIndex ++){
if (Cifra[Index] > Cifra[VnitrniIndex]) Poradi --;
}
}
return (Poradi + 1);
}Cifry jsou brany od nejvyssi vahy po nejnizsi, normalne tak jak se cislo pise. Trochu jsem to testoval, a zdalo se mi, ze to funguje, ale nerucim za to :-) (Jeste se kdyztak zitra podivam na tu druhou ulohu, to by melo byt skoro to same)
Offline