给定一个无序整数列表,以这种方式打印两个总计为m
的整数int1 int2
(int 1小于或等于int 2,它们之间用空格隔开)。假设整数列表中总是有m
的解。int1和int2必须是正整数。
如果有多个解决方案,请打印差异最小的整数对。
例子:
Li = [2, 6, 8, 10, 4]
m = 10
Output:
4 6
这是我的代码,但是根据我们的编译器(这是我们班的一个练习),我对隐藏的测试用例有错误的输出。
li = [2, 6, 8, 10, 4]
m = int(input())
selection = {} # I created a dictionary to put all pairs, sort them
# and print the pair with the least difference.
for j in li:
index = li.index(j)
temp = li.pop(index)
if m-j in li and j != m: # checks if m-j is present in the list, and j
# does not equal to m, since we're only looking
# for positive integer pairs
if abs(j - (m-j)) not in selection : # don't have to rewrite in the dict
# if pair is already written.
selection[abs(j - (m-j))] = [min(j, m-j), max(j, m-j)]
li.insert(index, temp)
output = min(selection.keys()) # gets the pair with the minimum difference in the dict
print(*selection[output])
更新:代码工作!
代码:
Li = [2, 6, 8, 10, 4]
m = 10
#Output:
#4 6
m_satisfied = []
for i in range(len(Li) - 1):
for j in range(i+1, len(Li)):
if (Li[i] + Li[j]) == m:
m_satisfied.append(tuple([Li[i], Li[j]]))
diff_dict = {i: abs(t[0] - t[1]) for i,t in enumerate(m_satisfied)}
least_diff = min(diff_dict.values())
ind_m_satisfied = [k for k, v in diff_dict.items() if v == least_diff]
res_int = [m_satisfied[i] for i in ind_m_satisfied]
print(res_int)
print(res_int[0][0], res_int[0][1])
输出:
[(6, 4)]
6 4
我知道这是一个背包问题,其中权重和值相等,但我认为我在编码逻辑上犯了一个错误,因为即使对于数组中元素的数量(N)为50并且所需的最大总和(M)4500。 为了澄清这个问题,我们得到了一个由N个正整数和一个正整数M组成的数组。数组元素只能使用一次。我们必须找到这个数组的子集(不一定是连续的),使得总和最接近M,但不超过它。 这是我使用动态编程的尝试: 那么在我的代码中是否有任何可能的优化可以帮助我降
问题内容: 我们需要在分配中递归地找到一个数组中的第二个最小整数。但是,为了更好地理解该主题,我想先通过本网站进行迭代,然后自己进行递归。 不幸的是,迭代地进行相当混乱。我知道该解决方案很简单,但我无法解决。 到目前为止,以下是我的代码: 这适用于一些数字,但不是全部。数字会变化,因为内部if条件的效率不如外部if条件的效率。 禁止阵列重排。 问题答案: 试试这个。当最小的数字是第一个时,第二个条
我只能想到一个朴素的算法,它列出集合的所有子集,并检查子集的和是否和是否最小,但它是一个指数算法,列出所有子集需要O(2^n)。我能用动态规划在多项式时间内求解吗?
我试着写一个代码,它接受一个介于1和1_000_000之间的整数,并返回一个比相同数字的整数大的最小整数,如果它不存在,则打印0。 举个例子 输入:156 输出165 输入330 输出0 输入27711 输出71127 我的问题是,下面的代码没有为其他输入返回正确的输出。 例如,在输入4231中,输出应该是4312。 我很难找到为每个输入返回正确输出的最佳算法。 TNX提前 }
给定一个数组,你必须找到最大可能的两个相等的总和,你可以排除元素。 即给定数组,我们可以有最大两个相等的和,因为6 2=4 3 1 即 4,10,18, 22,我们可以得到两个相等的总和,因为 18 4 = 22 除了蛮力寻找所有计算并检查两个可能的相等和之外,你解决这个问题的方法是什么? 编辑1:数组元素的最大数目为N 编辑2:这是我的解决方案,https://ideone.com/cAbe4g
问题内容: 想象两个正整数A和B。我想将这两个整数合并为一个整数C。 不能有其他整数D和E组合成C。因此,将它们与加法运算符组合起来是行不通的。例如,30 + 10 = 40 = 40 + 0 = 39 + 1叠加都不起作用。例如,“ 31” +“ 2” = 312 =“ 3” +“ 12” 此组合运算还应该是确定性的(始终在相同的输入下产生相同的结果),并且应始终在整数的正或负侧产生整数。 问题