如果对每一对数字ai,aj,(i≠j)存在ak,使得ak = ai * aj,则数组a称为优美。注意,k也可以等于i或j。找出给定的数组a是否漂亮!
投入:
产出:
为什么我会得到一个运行时错误?
T = input()
i = 0
while i < T:
n = input()
a = raw_input()
k = a.split(" ")
for i in range(n):
k[i] = int(k[i])
for i in range(n):
for j in range(n):
if i!=j:
if a[i]*a[j] not in a:
print "no"
sys.exit()
print "yes"
i = i + 1我已经编辑了我的代码,但这也给了我错误的答案。
发布于 2017-05-12 17:40:58
我不知道你会犯什么错误,所以我不能对此发表评论,但你的逻辑似乎是错的。尝试将-20,-15,-4,5作为您的输入。它会说,它是美丽的,当它显然不是。您只检查数组中两个最大元素的乘积是否在数组中。
发布于 2017-05-12 18:24:36
通过查看您的代码,可以知道您误解了问题的某些部分,这是我在阅读了您的问题之后提出的,并且可能有一个更健壮和优化的方法来解决这个问题。
import sys
T = input()
i = 0
while i < T:
n = int(raw_input())
a = map(int, raw_input().split(' '))
mem = {}
for j in range(n):
mem[a[j]] = j
for k in mem.keys():
for j in range(mem[k]+1 , n):
if k*a[j] in mem:
print "yes"
sys.exit()
print "no"
i+=1https://stackoverflow.com/questions/43943101
复制相似问题