You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编程:统计给定数字序列可组成的三位不同偶数个数

统计数字序列中可组成的不同三位偶数个数(Python实现)

问题描述

编写Python程序,针对给定的数字序列,统计可组成的不同三位偶数的个数,组成每个三位数时每个数字最多使用一次。

输入规则

  • 第一行输入数字个数N(3≤N≤50000)
  • 第二行输入N个以空格分隔的数字

输出规则

仅输出统计得到的三位偶数个数


示例

输入

4
2 4 2 2

输出

4

解释

由数字2、4、2、2可组成4个不同的三位偶数:222、224、242、422


解题思路

由于需要统计不同的三位偶数,核心是避免重复计数,同时保证每个数字的使用次数不超过原序列中的出现次数:

  1. 先统计每个数字的出现次数,用Counter高效处理大量数字
  2. 遍历所有可能的个位数字(必须是偶数:0、2、4、6、8),对每个个位数字:
    • 临时减少该数字的计数(占用一次作为个位)
    • 遍历所有合法的百位(非0)和十位数字组合,用集合记录生成的三位数以去重
    • 恢复个位数字的计数
  3. 最终集合的大小之和就是不同三位偶数的总数

完整代码

from collections import Counter

n = int(input())
nums = list(map(int, input().split()))
num_count = Counter(nums)
total = 0

# 遍历所有可能的个位偶数
for last_digit in [0, 2, 4, 6, 8]:
    if num_count[last_digit] == 0:
        continue
    # 占用一个数字作为个位
    num_count[last_digit] -= 1
    unique_nums = set()
    # 遍历百位数字
    for first_digit in num_count:
        if num_count[first_digit] == 0 or first_digit == 0:
            continue
        # 占用一个数字作为百位
        num_count[first_digit] -= 1
        # 遍历十位数字
        for second_digit in num_count:
            if num_count[second_digit] > 0:
                unique_nums.add(f"{first_digit}{second_digit}{last_digit}")
        # 恢复百位数字的计数
        num_count[first_digit] += 1
    # 累加当前个位对应的不同三位数数量
    total += len(unique_nums)
    # 恢复个位数字的计数
    num_count[last_digit] += 1

print(total)

内容的提问来源于stack exchange,提问作者Petar Tomic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:50:34