Python代码失败

2024-10-04 01:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码失败。抛出异常而不产生输出。你知道吗

对输入的约束为1<;=n<;=1000,1<;=k<;=n,s.length等于n。还可以保证输入完全符合规定。你知道吗

此外,当1<;=n<;=20时,代码也起作用。你知道吗

def conforms(k,s):
    k = k + 1
    if s.find("0" * k) == -1 and s.find("1" * k) == -1:
        return True
    else:
        return False


def brute(n,k,s):
    min_val = n + 1
    min_str = ""
    desired = long(s,2)
    for i in range (2 ** n):
        xor = desired ^ i # gives number of bit changes
        i_rep = bin(i)[2:].zfill(n) # pad the binary representation with 0s - for conforms()
        one_count = bin(xor).count('1')
        if one_count < min_val and conforms(k, i_rep):
            min_val = bin(xor).count('1')
            min_str = i_rep

    return (min_val,min_str)

T = input()
for i in range(T):
    words = raw_input().split() 
    start = raw_input()
    sol = brute( int(words[0]), int(words[1]), start)
    print sol[0]
    print sol[1]

Tags: 代码ltforinputreturnbincountval
1条回答
网友
1楼 · 发布于 2024-10-04 01:26:55

问题是rangexrange是用C编写的,因此它们很容易溢出。您需要编写自己的数字生成器来超越Clong的限制。你知道吗

def my_range(end):
    start = 0
    while start < end:
        yield start
        start +=1 


def conforms(k,s):
    k = k + 1
    if s.find("0" * k) == -1 and s.find("1" * k) == -1:
        return True
    else:
        return False


def brute(n,k,s):
    min_val = n + 1
    min_str = ""
    desired = long(s,2)
    for i in my_range(2 ** n):
        xor = desired ^ i # gives number of bit changes
        i_rep = bin(i)[2:].zfill(n) # pad the binary representation with 0s - for conforms()
        one_count = bin(xor).count('1')
        if one_count < min_val and conforms(k, i_rep):
            min_val = bin(xor).count('1')
            min_str = i_rep
    return (min_val,min_str)


T = 1
for i in range(T):
    words = [100, 1]
    start = '00000001'
    sol = brute(words[0], words[1], start)
    print sol[0]
    print sol[1]

相关问题 更多 >