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