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,
chtěl bych se zeptat zda se nějak dá využít program urcujici nasledujici permutaci k vytvoreni programu "n-tá permutace" - na vstupu by byly dvě čísla (jedno znamenajici pocet prvku permutace a druhe poradi permutace v lexikografickém uspořádání).
děkuji
Offline
↑ myrek:
Zdarec,
no to zavisi od toho jak generujes tu dalsiu permutaci, ale ked chces len k- tu permutaciu v lexikografickom poradi, tak ono sa to da vycitat priamo s toho cisla. Rekurzivne si pocitas cifry na zaklade toho cisla. Mal som to na pisomke este v prvaku, tak prikladam kod v C#.
PS: Rekurzivne sa to da urobit ovela elegantnejsie.
using System; using System.Collections.Generic; namespace permutace { class Program { static int[] Prvky = new int[100]; static int N; // pocet prvkov static int K; // K-ta permutace static int[] Permutacie = new int[100]; static int Faktorial(int N) { int i = 1; for (int j = 1; j <= N; j++) i = i * j; return i; } static void Vymaz(int[] Pole, int M) { for (int i = 1; i <= N; i++) if (Pole[i] == M) { for (int j = i; j <= N; j++) Pole[j] = Pole[j + 1]; break; } } static void Main(string[] args) { string vstup; string[] VstupPom = new string[2]; vstup = Console.ReadLine(); VstupPom = vstup.Split(); N = int.Parse(VstupPom[0]); K = int.Parse(VstupPom[1]); int Vystup; for (int i = 1; i <= N; i++) Prvky[i] = i; for (int i = 1; i <= N; i++) { if (K % Faktorial(N - i) == 0) { Vystup = Prvky[K / Faktorial(N - i)]; Console.Write(Prvky[K / Faktorial(N - i)] %2 + " "); Vymaz(Prvky, Vystup); K = K - (K / Faktorial(N - i) - 1) * (Faktorial(N - i)); } else { Vystup = Prvky[((K + Faktorial(N - i)) / Faktorial(N - i))]; Console.Write(Vystup%2 + " "); Vymaz(Prvky, Vystup); K = K - (((K + Faktorial(N - i)) / Faktorial(N - i)) - 1) * (Faktorial(N - i)); } } } } }
Offline