2017-05-12 11 views
0

配列aは、ai、aj、(i≠j)のすべての対に対してak = ai * ajのようなakが存在すれば美しいと呼ばれます。 kはiまたはjと等しくてもよいことに注意してください。与えられた配列が美しいかどうかを調べる!配列が美しいかどうかを調べる

INPUT:入力の

  1. 最初の行は、テストケースの数を表す整数値Tを含んでいます。 Tテストケースが続きます。
  2. 各テストケースの最初の行には、aの要素の数を示す整数nが含まれています。
  3. 次の行には、配列aを示すn個のスペースで区切られた整数が含まれています。

OUTPUT:

  • 、 "はい" または "いいえ"

はなぜランタイムエラーを取得していないのですか?

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 

私のコードを編集しましたが、これも私に間違った答えを与えています。

+4

エラーは何ですか。 – AlG

+1

あなたは 'while loop'で' i'を更新していません – JkShaw

+3

あなたの投稿を編集して、あなたが持っているエラーを含めてください。 – baranskistad

答えて

0

私はあなたが何を得ているのか分からないので、私はそれにコメントすることはできませんが、あなたのロジックはオフになっているようです。あなたの入力として-20,-15,-4,5を与えてみてください。それは明らかにそうでないときには美しいと言うでしょう。配列内の2つの最も大きな要素の積が配列内にあるかどうかをチェックするだけです。

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 
+0

あなたのコードは間違った答えを与えています – SSS

+0

私は問題の新しいコードを書いていますが(問題の編集に気づいてください)、私は同じ問題に遭遇しています...間違った答え – SSS

+0

あなたのロジックはまだ間違っています。 a [i] * a [i]はaにはなく、a [0] * a [1]自体が配列に存在しない場合、プログラムはaの要素の残りの部分を無視して印刷しません。 また、i!= jの問題について言及した後、jを0からループすることはできません。範囲(1、n)内になければなりません。 –

関連する問題