3025 - PCR

De la Universitas MediaWiki
Versiunea din 4 iunie 2024 08:32, autor: Danciu (discuție | contribuții) (Pagină nouă: = Cerința = Se dă <code>n</code> un număr natural. Cifrele lui <code>n</code> se permută pentru a forma un număr natural, de aceeași lungime cu <code>n</code>, și care să fie palindrom. Aflați câte asemenea numere se pot obține. = Date de intrare = Programul citește de la tastatură numărul <code>n</code>. = Date de ieșire = Programul va afișa pe ecran numărul de palindromuri care se pot obține prin permutarea cifrelor lui <code>n</code>. = Restricții ș...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerința

Se dă n un număr natural. Cifrele lui n se permută pentru a forma un număr natural, de aceeași lungime cu n, și care să fie palindrom. Aflați câte asemenea numere se pot obține.

Date de intrare

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

Date de ieșire

Programul va afișa pe ecran numărul de palindromuri care se pot obține prin permutarea cifrelor lui n.

Restricții și precizări

Exemplu:

Intrare

1102022

Ieșire

4

Explicație

Permutând cifrele lui 1102022 se pot obține următoarele palindromuri de aceeași lungime cu 1102022: 1022201, 1202021, 2012102, 2102012.

Rezolvare

def count_palindrome_permutations(n):
    total_palindromes = 0
    num_even_digits = 0
    num_odd_digits = 0
    duplicated_digit_count = 0

    while n > 0:
        digit = n % 10
        if digit % 2 == 0:
            num_even_digits += 1
        else:
            num_odd_digits += 1
        n //= 10

    if num_even_digits > 1 or num_odd_digits > 1:
        duplicated_digit_count = 1

    if num_even_digits % 2 == 0:
        total_palindromes += (num_even_digits // 2)! * (num_odd_digits // 2)!

    if num_odd_digits % 2 == 0:
        total_palindromes += (num_odd_digits // 2)! * (num_even_digits // 2)!

    if num_odd_digits == 1 and num_even_digits > 0:
        total_palindromes += (num_even_digits // 2)! * duplicated_digit_count

    if num_even_digits == 1 and num_odd_digits > 0:
        total_palindromes += (num_odd_digits // 2)! * duplicated_digit_count

    return total_palindromes

def main():
    n = int(input())
    palindrome_count = count_palindrome_permutations(n)
    print(palindrome_count)

if __name__ == "__main__":
    main()