演習課題「累積和を求める」
整数nと要素数nの配列aが与えられるので、この配列の累積和を半角スペース区切りで出力してください。
今回考える累積和は、先頭0個の和を考慮するものとします。
入力を受け取るコードと出力用の関数print_arrayがすでに用意されているので、コードを書き足してプログラムを完成させてください。
期待する出力値
0 1 3 6 10 15
演習課題「累積和を使って区間の和を計算する」
整数n,x,yと長さnの配列aが与えられるので、この配列のx番目からy番目までの要素の和を累積和を使って出力してください。
ただし、数列の最初の要素を1番目とします。
入力を受け取るコードがすでに用意されているので、コードを書き足してプログラムを完成させてください。
期待する出力値
9
演習課題「累積和を求める(inclusive scan)」
整数nと長さnの配列aが与えられるので、この配列の累積和を半角スペース区切りで出力してください。
ただし、今回考える累積和は、先頭0個の和を考慮しないものとします。これについて詳しくはTipsを参考にしてください。
入力を受け取るコードと出力用の関数print_arrayがすでに用意されているので、コードを書き足してプログラムを完成させてください。
期待する出力値
1 3 6 10 15
#02:区間の和
このチャプターでは、配列から累積和を計算して、区間の和を求めるプログラムを実装します。
先頭0個の和を考慮しない累積和の計算を行う場合はs[0]=a[0]としたのち、iを1からn-1まで繰り返してs[i]=s[i-1]+a[i]とすることで求めることができます。配列sのサイズはnになることに注意しましょう。
また、元の配列でそのまま計算することもでき、その場合も同じくiを1からn-1まで繰り返してa[i]+=a[i-1]とすることで求めることができます。
n, x, y = map(int, input().split())
a = [int(x) for x in input().split()]
# 累積和を格納する長さn+1の配列(リスト)sを0で初期化
s = [0] * (n+1)
# iを0からn-1まで繰り返す
for i in range(n):
# s[i+1]にs[i]+a[i]を代入
s[i+1] = s[i] + a[i]
# s[y+1]-s[x]を出力
print(s[y+1] - s[x])
3 1 2
10 11 12