确定阵列是否漂亮

时间:2017-05-12 17:09:17

标签: python

如果对于每对数字ai,aj,(i≠j),阵列a被称为美丽,则存在ak使得ak = ai * aj。注意,k也可以等于i或j。找出给定的数组a是否漂亮!

INPUT:

  1. 输入的第一行包含一个整数T,表示测试用例的数量。 T测试案例如下。
  2. 每个测试用例的第一行包含一个整数n,表示a。中的元素数。
  3. 下一行包含n个空格分隔的整数,表示数组a。
  4. 输出:

    • "是"或"不"

    为什么我收到运行时错误?

    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
    

    我已经编辑了我的代码,但这也给了我错误的答案。

2 个答案:

答案 0 :(得分:0)

我不知道你得到了什么错误所以我无法评论,但你的逻辑似乎已经消失了。尝试将-20,-15,-4,5作为输入。当它显然不是时,它会说是美丽的。您只是检查数组中两个最大元素的乘积是否在数组中。

答案 1 :(得分:0)

通过查看你的代码可以告诉你,你误解了问题的某些部分,这是我在阅读你的问题后提出的,并且可能有一个更强大和优化的方法来解决这个问题。

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+=1