加算された数列の最小値

#お題

N 個の整数 a_1, a_2, ..., a_N が与えられます。
a_i に i を足したとき、N 個の整数の最小値を出力してください。

 

 

#入力

N
a_1 a_2 ... a_N

・ 1 行目に整数 N が与えられます。
・ 2 行目に N 個の整数 a_1, a_2, ..., a_N が与えられます。

 

 

 

#出力

a_i に i を足したとき、N 個の整数の最小値を出力してください。

 

 

 

#コード

n = int(input())
a = [int(x) for x in input().split()]
print(a)

b = []
cnt = 1
for i in a:
    b.append(i+cnt)
    cnt += 1

print(b)

print(min(b))

 

 

 

#参考

N = int(input())
a = list(map(int, input().split()))

ans = 10000
for i in range(N):
    ans = min(ans, a[i] + (i + 1))

print(ans)
  • a_i に i を足す際、配列は 0 番目から数えることに注意して引いてください。
  • a[i] += i としてしまうと、a[0] ~ a[N-1] に 1 ~ n をそれぞれ足すはずが、a[1] ~ a[N] に 1 ~ n がそれぞれ足されてしまいます。(さらに、a[N] は配列外参照になってしまいます)
  • 最小値を保持する変数の初期値は 10000 としていますが、例えば a_i が全て 100 だった場合、その最小値は 101 となるので、もし初期値を 101 より小さくしてしまうと、その場合に対応できません。101 以上でその変数に収まる範囲なら、どのような値でも構いません。