Python编程:统计给定数字序列可组成的三位不同偶数个数
统计数字序列中可组成的不同三位偶数个数(Python实现)
问题描述
编写Python程序,针对给定的数字序列,统计可组成的不同三位偶数的个数,组成每个三位数时每个数字最多使用一次。
输入规则
- 第一行输入数字个数N(3≤N≤50000)
- 第二行输入N个以空格分隔的数字
输出规则
仅输出统计得到的三位偶数个数
示例
输入
4 2 4 2 2
输出
4
解释
由数字2、4、2、2可组成4个不同的三位偶数:222、224、242、422
解题思路
由于需要统计不同的三位偶数,核心是避免重复计数,同时保证每个数字的使用次数不超过原序列中的出现次数:
- 先统计每个数字的出现次数,用
Counter高效处理大量数字 - 遍历所有可能的个位数字(必须是偶数:0、2、4、6、8),对每个个位数字:
- 临时减少该数字的计数(占用一次作为个位)
- 遍历所有合法的百位(非0)和十位数字组合,用集合记录生成的三位数以去重
- 恢复个位数字的计数
- 最终集合的大小之和就是不同三位偶数的总数
完整代码
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
相关产品推荐
相关产品推荐

