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

给定0和1列表计算不同二进制序列排列数及代码错误排查

问题需求

给定一个由二进制数(0和1)组成的列表,计算使用给定的0和1可以排列出的不同二进制序列的总数量。

输入格式

单行输入,内容为若干个用空格分隔的0和1

输出格式

输出一个整数值,代表给定0和1可排列出的不同二进制序列的数量

示例

输入:
0 1 0 1
输出:
6

示例说明

对于上述输入,可生成的不同二进制序列包括0011、0101、0110、1001、1010、1100,因此输出结果为6。

代码问题修复

错误原因

你的代码使用普通除法/计算阶乘比值是问题根源:

  • Python中/会返回浮点数,当输入序列长度较大时,阶乘结果远超浮点数精度范围,会出现计算失真、甚至溢出报错的问题
  • 该场景属于整数运算场景,应该使用整数除法避免精度损失

修复方案1 兼容所有Python版本

将普通除法替换为整数除法//,同时优化变量可读性:

import math
c = input().split()
count_0 = 0
count_1 = 0
for i in c:
    num = int(i)
    if num == 0:
        count_0 += 1
    elif num == 1:
        count_1 += 1
total_len = len(c)
answer = math.factorial(total_len) // (math.factorial(count_1) * math.factorial(count_0))
print(answer)

修复方案2 Python 3.10+ 更简洁写法

直接使用内置组合数计算方法math.comb,性能更高、代码更简洁:

import math
c = input().split()
count_1 = sum(1 for item in c if item == '1')
print(math.comb(len(c), count_1))

内容的提问来源于stack exchange,提问作者Amazon King

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:27:01