1016 - imparpar

De la Universitas MediaWiki

Cerinţa

Se dă n un număr natural. Să se afle în câte moduri putem aranja numerele de la 1 la n astfel încât numerele pare să fie situate pe poziții impare iar cele impare pe poziții pare ?

Date de intrare

Programul citește de la tastatură numărul natural n.

Date de ieșire

Programul va afișa pe ecran numărul de moduri în care putem aranja numerele de la 1 la n astfel încât numerele pare să fie situate pe poziții impare iar cele impare pe poziții pare.

Restricţii şi precizări

  • 1 ⩽ n ⩽ 20

Exemplul 1

Intrare
4
Iesire
Datele de intrare corespund restrictiilor impuse
4

Exemplu 2

Intrare
25 
Iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

from math import factorial


def compute_arrangements(n):
    even_positions = n // 2
    odd_positions = n - even_positions

    even_numbers = n // 2
    odd_numbers = n - even_numbers

    if even_positions < even_numbers or odd_positions < odd_numbers:
        return 0
    else:
        return factorial(even_positions) * factorial(odd_positions)


def main():
    n = int(input())

    if n > 20:
        print("Datele de intrare nu corespund restrictiilor impuse")
        return

    arrangements = compute_arrangements(n)
    print("Datele de intrare corespund restrictiilor impuse")
    print(arrangements)


if __name__ == "__main__":
    main()

Explicatie

Numerele de la 1 la 4 se pot aranja astfel : (2,1,4,3), (2,3,4,1), (4,1,2,3), (4,3,2,1) astfel încât numerele pare sunt pe poziții impare și numerele impare sunt pe poziții pare. Avem 4 moduri de aranjare.