Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 找到'的最大值;和';一组_Python - Fatal编程技术网

Python 找到'的最大值;和';一组

Python 找到'的最大值;和';一组,python,Python,给定一个数字(x)和阈值,找出在x之前对所有数字执行二进制和可以达到的最大值。最大值应小于阈值 如果2,3是输入,那么 A = 1 ; B = 1 ; A & B = 1 A = 1 ; B = 2 ; A & B = 0 A = 2 ; B = 1 ; A & B = 0 A = 2 ; B = 2 ; A & B = 2 在这个例子中,我从和操作中得到的最大值是2,它小于阈值3,因此2是应该打印的答案 我必须从所有这些可能的输入中找到最大值,然后打印它们。我

给定一个数字(x)和阈值,找出在x之前对所有数字执行
二进制和
可以达到的最大值。最大值应小于阈值

如果2,3是输入,那么

A = 1 ; B = 1 ; A & B = 1
A = 1 ; B = 2 ; A & B = 0
A = 2 ; B = 1 ; A & B = 0
A = 2 ; B = 2 ; A & B = 2
在这个例子中,我从
操作中得到的最大值是2,它小于阈值3,因此2是应该打印的答案

我必须从所有这些可能的输入中找到最大值,然后打印它们。我用这个代码解决了这个问题

maxValue = 0
n,k1 = input().strip().split(' ')
n,k1 = [int(n),int(k1)]
for j in range (1,n):
    for k in range (j+1,n):
        jkValue = j&k
        if jkValue > maxValue and jkValue < k1:
            maxValue = jkValue
print(maxValue)
maxValue=0
n、 k1=输入().strip().split(“”)
n、 k1=[int(n),int(k1)]
对于范围(1,n)内的j:
对于范围(j+1,n)内的k:
jkValue=j&k
如果jkValue>maxValue且jkValue
根据我以前处理此类问题的经验,如果我使用某种数据结构,如
list
map
,我可以更有效地解决此问题


是否有可能使用数据结构来解决这个问题,或者我是否达到了最小的复杂性?如果可以改进,那么如何改进?

我假设问题是找到
0我假设问题是找到
0这可能是最小的复杂性。如果您在列表中使用类似于
项的内容,它仍然在for循环中运行for循环。您的问题陈述是无法理解的。“在此之前,所有数字上的最大值应小于阈值”部分没有语法意义。这个问题很难理解。您是否正在尝试查找
max(i&j使得0
?@PaulHankin我添加了一个示例以更清楚地说明问题……现在检查问题您的示例允许A=B作为解决方案,但您的代码不允许。如果你允许两个数字是相同的,那么答案是min(n,k-1)。这可能是最小的复杂度。如果您在列表中使用类似于
项的内容,它仍然在for循环中运行for循环。您的问题陈述是无法理解的。“在此之前,所有数字上的最大值应小于阈值”部分没有语法意义。这个问题很难理解。您是否正在尝试查找
max(i&j使得0
?@PaulHankin我添加了一个示例以更清楚地说明问题……现在检查问题您的示例允许A=B作为解决方案,但您的代码不允许。如果您允许两个数字是相同的,那么答案是min(n,k-1)。
# max_and returns the max i&j subject to:
# 0 < i < j < n and i&j < k.
def max_and(n, k):
    r = 0
    b = 1
    while b < k:
        b <<= 1
    while b:
        # Can we set bit b in the result?
        # We can't if r|b >= k.
        # Otherwise, are there two numbers greater than or equal to r,
        # and less than n, both with bit b set?
        # The two smallest numbers greater than or equal to r with
        # bit b set are r|b and ((r|b) + 1) | (r|b). We need only
        # test the latter against n.
        if (r | b) | ((r | b) + 1) < n and r|b < k:
            r |= b
        b >>= 1
    return r
def max_and_slow(n, k):
    return max(i&j for i in xrange(n) for j in xrange(i+1, n) if i&j < k)

for n in xrange(2, 20):
    for k in xrange(1, 20):
        mas = max_and_slow(n, k)
        ma = max_and(n, k)
        if ma != mas:
            print 'max_and(%d, %d) = %d, want %d' % (n, k, ma, mas)