9

すべての数値の合計nを計算する関数を作成する必要があります。

Row 1:          1 
Row 2:         2 3 
Row 3:        4 5 6 
Row 4:       7 8 9 10 
Row 5:     11 12 13 14 15 
Row 6:   16 17 18 19 20 21 

上記の行を「数字の三角形」として想像するのに役立ちます。関数は数値nを取る必要があります。これは、使用する数値と行の数を示します。行5の合計は65です。任意のn値に対してこの計算を実行する関数を取得するにはどうすればよいですか?

わかりやすくするために、これは宿題ではありません。それは最近の中期であり、言うまでもなく、私は困惑しました。

4

6 に答える 6

14

5列目の左端の数字11 = (4+3+2+1)+1はですsum(range(5))+1。これは一般的にすべてのに当てはまりますn

それで:

def triangle_sum(n):
    start = sum(range(n))+1
    return sum(range(start,start+n))

多くの人が指摘しているように、sum(range(n))分析的に表現できるn*(n-1)//2ので、これは次の方法でさらに少しエレガントに行うことができます。

def triangle_sum(n):
    start = n*(n-1)//2+1
    return sum(range(start,start+n))
于 2012-10-11T17:16:36.193 に答える
4

方程式を使用するソリューションですが、その方程式に到達するには少し手間がかかります。

def sumRow(n):
    return (n**3+n)/2
于 2012-10-11T17:25:46.667 に答える
2

1、3、6、10などの数字は三角数と呼ばれ、明確な進行があります。単純に2つの境界三角数を計算し、を使用range()して、両方の三角数とsum()それらから適切な行の数を取得します。

于 2012-10-11T17:16:25.890 に答える
0
def sum_row(n):
    final = n*(n+1)/2
    start = final - n
    return final*(final+1)/2 - start*(start+1)/2

または多分

def sum_row(n):
    final = n*(n+1)/2
    return sum((final - i) for i in range(n))

どのように機能しますか:

関数が最初に行うことは、各行の最後の数値を計算することです。n = 5の場合、15を返します。なぜ機能するのですか?各行は、右側の番号を行の番号だけインクリメントするためです。最初は1つあります。次に1+2 = 3; 次に3+3 = 6; 次に6+4 = 10、ecc。これは、単純に1 + 2 + 3 + .. + nを計算していることを意味します。これは、有名な数式のn(n + 1)/2に相当します。

次に、finalからfinalまでの数値を合計できます-n + 1(単純なforループが機能するか、リスト内包表記のような派手なもの)または、1からfinalまでのすべての数値を合計してから、1からfinalまでの数値の合計を減算しますfinal-n、示されている式で行ったように。あなたはいくつかの数学的な操作でより良くすることができます

于 2012-10-11T17:18:41.893 に答える
0

一般的な解決策は次のとおりです。

start=1
n=5
for i in range(n):
    start += len (range(i))
answer=sum(range(start,start+n))

関数として:

def trio(n):
    start=1
    for i in range(n):
            start += len (range(i))
    answer=sum(range(start,start+n))
    return answer
于 2012-10-11T17:19:31.397 に答える
0
def compute(n):
   first = n * (n - 1) / 2 + 1
   last = first + n - 1
   return sum(xrange(first, last + 1))
于 2012-10-11T17:29:05.077 に答える