1016 - imparpar

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.