2

問題はもともとこのリンクにあります。私は Python コードを書きましたが、64 ポイント (合計ポイントは 100) を獲得しました。これは、私のコードに不足しているポイントがあることを示しています。16 のテスト ケースのうち 11 に合格しましたが、5 つのテスト ケースに問題がありました。私のコードのどこに欠けている点があり、どうすれば修正できますか?

import math

m = int(raw_input())
liste = []
y_liste = []
md = 0
ad = 0
sum = 0
sum2 = 0

for k in range(m):
    temp = str(raw_input())
    liste.append(temp)
    liste[k] = liste[k].split(" ")
    liste[k] = [int(i) for i in liste[k]]

for k in range(m):
    md += liste[k][k]
    ad += liste[k][m-k-1]



if md == ad:
    print 0
else:
    for k in range(m):
        for l in range(m):
            sum2 += liste[l][k]
            sum += liste[k][l]
        if sum2 != md and -(k+1) is not y_liste:
            y_liste.append(-(k+1))
        if sum != md and (k+1) is not y_liste:
            y_liste.append(k+1)
        sum2 = 0
        sum = 0

    if md != ad:
        y_liste.append(0)
    print len(y_liste)
    y_liste.sort()
    for i in y_liste:
        print i

問題文

魔方陣

ジョニーは、魔方陣 (すべての行、列、および対角線の合計が同じ数の二乗、つまり、主対角線 (左上隅から右下隅に向かう対角線を意味します) と逆対角線 (対角線を意味します) の両方) を設計しました。右上隅から左下隅に向かっている)。それをテストするプログラムを書きます。

タスク
与えられた正方形が魔法であるかどうか (つまり、すべての行、列、対角線の合計が同じかどうか) をチェックするプログラムを作成してください。

入力
1 行目: N 、正方形のサイズ (1 <= N <= 600)。次の N 行: 四角形、N スペースで区切られた行の前の整数、四角形の各行ごとのエントリを表します。

出力
最初の行: M 、合計が主対角線 (つまり、正方形の最初の要素を含むもの) の合計に達しない行の数。正方形が魔法の場合、プログラムは 0 を出力する必要があります。 次の M 行: 主対角線の合計に達しない行の並べ替えられた (インクリメンタルな順序で) リスト。行には 1、2、…、N の番号が付けられます。列には -1、-2、…、-N の番号が付けられます。対角線の番号は 0 です。

注: 出力の最終行の末尾に改行文字があります。
サンプル入力 1
3
8 1 6
3 5 7
4 9 2

サンプル出力 1
0

サンプル入力 2
4
16 3 2 13
5 10 11 8
6 9 7 12
4 15 14 1

サンプル出力 2
3
-2
-1
0

出力例 2 の説明入力四角形
は次のようになります 。

上の画像に示すように、正方形には 4 つの行 (オレンジ色で 1 から 4 のラベルが付いています) と 4 つの列 (緑色で -1 から -4 のラベルが付いています) があります。正方形の主対角線と対角線は、それぞれ赤と青で強調表示されます。

主対角線の合計は 16 + 10 + 7 +1 = 34
です。逆対角線の合計は 13 + 11 + 9 + 4 = 37 です。これは主対角線の合計とは異なるため、逆対角線に対応する値 0 は次のようになります。報告。
行 1 の合計 = 16 + 3 + 2 + 13 = 34。
行 2 の合計 = 5 + 10 + 11 + 8 = 34。
行 3 の合計 = 6 + 9 + 7 + 12 = 34。
行 4 の合計 = 4 + 15 + 14 + 1 = 34.
列 -1 の合計 = 16 + 5 + 6 + 4 = 31. これは主対角線の合計とは異なるため、値 -1 を報告する必要があります。
列 -2 の合計は 3 + 10 + 9 + 15 = 37 です。これは主対角線の合計とは異なるため、値 -2 を報告する必要があります。
列 -3 の合計は 2 + 11 + 7 + 14 = 34
です。列 -4 の合計は 13 + 8 + 12 + 1 = 34 です。
上記に基づいて、合計が主対角要素の合計にならない 3 つの線があります。それらは増分順にソートする必要があるため、出力は次のようになります:
3
-2
-1
0

4

1 に答える 1

0

あなたの説明では、エラーの潜在的な原因であるこの句については説明していません。

if md == ad:
    print 0
else:

主対角線と逆対角線の合計が同じ値になる場合は、魔方陣が有効であることを示す 0 (不良ラインなし) のみを出力します (不良ラインのリストで 0 を報告するのとは異なります)。この有効な魔方陣を考えてみましょう:

 9  6  3 16
 4 15 10  5
14  1  8 11
 7 12 13  2

13 と 11 を交換すると、対角線は互いに等しくなりますが、正方形は無効になります。したがって、上記のコードは正しくないようです。上記のステートメントのelse句では、次のことをテストします。if

if md != ad:
    y_liste.append(0)

以前の/外側のテストからすでに真実であることがわかっているため、コードはそれ自体と一致していないようです。

于 2016-07-07T06:19:16.313 に答える