Programozó versenyek

Magas szintű programozási nyelvek 1, egyéni verseny, 2016. április 10.

2016. április 10. 10:00 – 2016. április 10. 15:00

Kombinációk

Annak a pontos értékét kiszámítani, hogy hányféleképpen lehet N elemből M elemet kiválasztani úgy, hogy minden elem csak egyszer fordulhat elő, nagy kihívás lehet, ha N és/vagy M nagy érték. A verseny lényege azonban a kihívás, ezért pontosan egy ilyen számítást kell elvégezned az alábbiak szerint:

Ha adott 5 ≤ N ≤ 100, 5 ≤ M ≤ 100 és M ≤ N, számítsd ki a C = N! / ((N – M)! · M!) pontos értékét!

Feltételezheted, hogy C végső értéke elfér egy 32 bites előjeles egészben (Pascal: longint, C: long).

Megjegyzés: 100! pontos értéke a következő:

   93 326 215 443 944 152 681 699 238 856 266 700 490 715 968 264 381 621
      468 592 963 895 217 599 993 229 915 608 941 463 976 156 518 286 253
      697 920 827 223 758 251 185 210 916 864 000 000 000 000 000 000 000 000

A bemenet specifikációja

A program bemenete egy vagy több sor, amelyek mindegyike nulla vagy több vezető szóközből, N értékéből, egy vagy több szóközből, végül M értékéből áll. A bemenet utolsó sora egy olyan (NM) páros lesz, amelyben mindkét érték 0. A programnak akkor kell megállnia, amikor ezt a sort beolvassa.

A kimenet specifikációja

A kimenetnek minden tesztesetre az alábbi formájú sornak kell lennie:

N things taken M at a time is C exactly.

Példa bemenet

  1.      100  6
  2.       20  5
  3.       18  6
  4.        0  0
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. 100 things taken 6 at a time is 1192052400 exactly.
  2. 20 things taken 5 at a time is 15504 exactly.
  3. 18 things taken 6 at a time is 18564 exactly.
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.