使用Python解决“A. IQ test”问题

发布于:2025-02-10 ⋅ 阅读:(71) ⋅ 点赞:(0)

一、问题背景

在Bob的IQ测试中,有一个常见任务是找出一个数字序列中与其他数字在奇偶性上不同的那个数字。给定一个数字序列,其中只有一个数字在奇偶性上与其他数字不同,要求找出这个数字的索引位置。

输入描述:

  1. 第一行:整数 nn(3≤n≤1003 \leq n \leq 100),表示数字的个数。
  2. 第二行:nn 个空格分隔的自然数(不超过100)。

输出描述:

输出与其他数字在奇偶性上不同的数字的索引(从1开始计数)。

样例输入输出:

样例1:

输入

5
2 4 7 8 10

输出

3
样例2:

输入

4
1 2 1 1

输出

2

二、问题分析

题目核心要求是判断一组数中哪个数字在奇偶性上与其他数不同。解决此问题的关键是:

  1. 判断每个数字的奇偶性(通过对2取模:x % 2)。
  2. 根据多数原则确定主流奇偶性(奇数或偶数)。
  3. 找出与主流奇偶性不符的数字。

我们可以分为以下几个步骤:

  1. 遍历数字列表,统计奇数和偶数的数量及其索引。
  2. 确定少数派(奇数或偶数)。
  3. 输出少数派数字的索引。

三、代码实现

以下是用Python编写的完整解决方案:

def find_different_index():
    # 输入数字个数
    n = int(input())
    # 输入数字序列
    numbers = list(map(int, input().split()))
    
    # 初始化两个列表分别存储奇数和偶数的索引
    odd_indices = []
    even_indices = []
    
    # 遍历序列,根据奇偶性分类
    for i in range(n):
        if numbers[i] % 2 == 0:
            even_indices.append(i + 1)  # 索引从1开始
        else:
            odd_indices.append(i + 1)
    
    # 判断奇偶性中谁是少数派
    if len(odd_indices) == 1:
        print(odd_indices[0])
    else:
        print(even_indices[0])

# 调用主函数
if __name__ == "__main__":
    find_different_index()

四、代码详解

1. 输入与输出

  • 使用 input() 获取用户输入。
  • list(map(int, input().split())) 将输入的数字转化为整型列表。
  • 输出结果直接使用 print()

2. 奇偶性判断

  • 判断奇偶性的方法是对2取模:
    • x % 2 == 0 表示偶数。
    • x % 2 == 1 表示奇数。

3. 分类与存储

  • 使用两个列表 odd_indiceseven_indices 分别存储奇数和偶数的索引(索引从1开始)。

4. 少数派判断

  • 根据奇数和偶数列表的长度判断:
    • 如果奇数列表长度为1,则奇数是少数派。
    • 否则,偶数是少数派。

五、样例测试

测试样例1

输入

5
2 4 7 8 10

运行过程

  1. 奇偶性判断:
    • 2是偶数,索引为1。
    • 4是偶数,索引为2。
    • 7是奇数,索引为3。
    • 8是偶数,索引为4。
    • 10是偶数,索引为5。
  2. 奇数列表:[3],偶数列表:[1, 2, 4, 5]
  3. 奇数是少数派,输出索引3

输出

3

测试样例2

输入

4
1 2 1 1

运行过程

  1. 奇偶性判断:
    • 1是奇数,索引为1。
    • 2是偶数,索引为2。
    • 1是奇数,索引为3。
    • 1是奇数,索引为4。
  2. 奇数列表:[1, 3, 4],偶数列表:[2]
  3. 偶数是少数派,输出索引2

输出

2

六、复杂度分析

1. 时间复杂度

  • 遍历数字列表:O(n)O(n)。
  • 因此,总时间复杂度为 O(n)O(n)。

2. 空间复杂度

  • 额外使用了两个列表存储奇数和偶数的索引,空间复杂度为 O(n)O(n)。

七、总结

通过该题,我们可以掌握:

  1. 数组的基本操作(遍历、索引存储)。
  2. 简单逻辑判断(奇偶性)。
  3. Python基本输入输出方法。

这类题目是算法竞赛中的基础题型,练习后可以为更复杂的问题打下良好基础。

你学会了吗?欢迎在评论区留言讨论!


如果您有任何问题,欢迎随时交流!🎉


网站公告

今日签到

点亮在社区的每一天
去签到