Əvvəlcə birinci dairəvi rəqs üçün adamı seçməliyik. Bu C^{n/2}_n yolla edilə bilər. Bir dairəvi rəqs daxilində insanları düzəltməyin yollarını sayaq. Birinci olacaq şəxsi sabitləyirik, bundan sonra qalan n / 2 - 1 adam hər hansı bir qaydada düzülə bilər, yəni (n / 2 - 1)! yolla. İki dairəvi rəqs formalaşdırma yollarının sayı:
Burada ilə bölmə lazımdır ki, biz dairəvi rəqs cütlərini və kimi fərqləndirməyək. Məsələn, n = 4 olduqda, dairəvi rəqs bölmələri ([1, 2], [3, 4]) və ([3, 4], [1, 2]) eyni sayılır.
Verilmiş formulu sadələşdirərək, biz cavabı alırıq:
Nümunə
Məsələn, n = 4 üçün yol sayı olacaq:
Birinci dairəvi rəqs — , ikinci — ;
Birinci dairəvi rəqs — , ikinci — ;
Birinci dairəvi rəqs — , ikinci — .
Formula görə n = 4 üçün cavabdır
üçün bütün fərqlənən dairəvi rəqsləri qurmaq üçün. İştirakçı -i birinci mövqedə yerləşdiririk. Qalan üç mövqedə digər üç iştirakçının hər hansı bir permutasiyası yerləşdirilə bilər.
Bu tənzimləmələri dairə içində döndürməklə, fərqlənməyən dairəvi rəqslər əldə edə bilərik. Məsələn, bu tənzimləmələr fərqlənmir (son permutasiyanın dövrü dəyişməsi ilə nəzərdə tutulur):
4 iştirakçı ilə 4! = 24 dairəvi rəqs var. Ancaq, fərqlənən dairəvi rəqslərin sayı n = 4 üçün 3! = 6.
Alqoritmin həyata keçirilməsi
fact funksiyası sayının faktorialını hesablayır.
long long fact(int n)
{
long long res = 1;
for (int i = 2; i <= n; i++)
res *= i;
return res;
}Programın əsas hissəsi. giriş dəyərini oxuyun.
scanf("%d", &n);Nəticəni hesablayın və çap edin.
res = 2 * fact(n - 1) / n;
printf("%lld\n", res);Python-da həyata keçirilməsi
fact funksiyası sayının faktorialını hesablayır.
def fact(n):
res = 1
for i in range(2, n + 1):
res *= i
return resProgramın əsas hissəsi. giriş dəyərini oxuyun.
n = int(input())Nəticəni hesablayın və çap edin.
res = 2 * fact(n - 1) // n
print(res)