📌  相关文章
📜  门| Sudo GATE 2020 Mock II(2019年1月10日)|第44章(1)

📅  最后修改于: 2023-12-03 14:58:33.260000             🧑  作者: Mango

门 | Sudo GATE 2020 Mock II(2019年1月10日) | 第44章

简介

本文是关于 Sudo GATE 2020 Mock II(2019年1月10日) 第44章题目的介绍。题目是关于门的问题,需要通过编程解决。

题目描述

有一个门,门上有n个数字,每个数字表示一个钥匙。每个钥匙都可以与其他钥匙配对。你可以选择颠倒任何两个钥匙的位置,以改变它们的配对方式。现在,你需要写一个程序来找出最少的操作次数,使得所有的钥匙都成对出现在门上。如果无法做到这一点,程序应返回-1。

输入

输入包含两行。第一行包含一个整数n (1 <= n <= 100),表示门上的数字数量。第二行包含n个整数a1, a2, ..., an (1 <= ai <= 100),表示门上的数字。

输出

输出一个整数,表示最少的操作次数,使得所有的钥匙都成对出现在门上。如果无法做到这一点,输出-1。

示例

输入:

5
1 2 2 3 3

输出:

1
解释

通过将第一个和最后一个数字相互交换,我们可以使得所有的钥匙成对出现在门上。

代码示例
def min_oper_count(n, nums):
    # 统计每个数字的数量
    count_map = {}
    for num in nums:
        if num in count_map:
            count_map[num] += 1
        else:
            count_map[num] = 1
    
    # 计算单个数字的数量
    single_count = 0
    for count in count_map.values():
        if count % 2 == 1:
            single_count += 1
            
    if single_count % 2 == 1:
        return -1
    else:
        return single_count // 2

n = int(input())
nums = [int(x) for x in input().split()]

op_count = min_oper_count(n, nums)
print(op_count)

请根据题目需要进行编写,并运行上述代码,得到正确结果。