

この問題がわからず困っています。

# 問題文

配列のst番目から最後の要素までの、最小値を探す。ただし、最小値の値そのものではなく、インデックスを求める。(何番目が最小値であるかを返す)下記の[ここを書く]にコードを入力せよ。

[code]

    def min_index(a,st):
      minidx=st # 先頭の要素のインデックスを最小値のインデックスとする
      for i in range(st+1,len(a)) # i番目のほうが最小値よりも小さいなら
        if[ここを書く]: # iを最小値のインデックスをする
          minidx = i
      return[ここを書く]
    
[/code]

先ほど挙げた実行例は別のプログラムでした、すみません！  
この問題の実行例は載っていませんでした。


CC BY-SA 4.0
2019-06-30T03:42:13.653
56240
2019-07-04T06:43:50.430
2019-06-30T09:03:20.307
19110
34911
question
python
最小値のインデックスを求めたい


問題文は「配列aのst番目から最後の要素」という事だと思います。  
また、for文の文末には:が必要です。

[code]

    def min_index(a,st):
      minidx=st # 先頭の要素のインデックスを最小値のインデックスとする
      for i in range(st+1,len(a)): # i番目のほうが最小値よりも小さいなら
        if a[i] < a[minidx]: # iを最小値のインデックスをする
          minidx = i
      return minidx
    
[/code]


CC BY-SA 4.0
2019-06-30T09:28:20.070
56256
2019-06-30T09:34:13.607
2019-06-30T09:34:13.607
19110
34916
56240
answer


このタイプの書き方は「最初から最後までの要素を順番にひとつずつ、記録を更新しながら見ていく」というパターンです。

リスト `[a, b, c, ..., d, e]` の要素の中でどれが一番小さい値なのか知りたいとき、もし `[a, b, c, ..., d]`
までの中でどこが一番小さいのかが分かっていれば、そこの値と `e` とをたった 1 回比べるだけで最小値を求めることができます。わざわざ他の全ての要素
`a, b, c, ..., d` に対して `e` と比べる必要はありません。

更に、`[a, b, c, ..., d]` の中で一番小さい値も、同じようにして「それまでの最小値」と `d`
を比べれば分かります。これを繰り返すと、まずは `a` と `b` のどっちが小さいか調べて、小さい方と `c`
とでどっちが小さいか調べて、……としていけば良いことが分かります。

今回のプログラムでは、このようにして最小値（のインデックス）を求めています。

まず、次のように `for` 文を書いて繰り返すことで、要素を最初から順番に見ています。

[code]

    for i in range(st+1, len(a)):
    
[/code]

次のこの部分では、「それまでの最小値」と「今見ている要素」のどちらが小さいかを調べます。

[code]

    if [ここを書く]:
    
[/code]

最後に、もし「今見ている要素」の方が小さいのであれば、その要素のインデックスを覚えておきます。

[code]

    minidx = i
    
[/code]

この動作を最後まで行えば、`minidx` に最小値のインデックスが代入されているはずです。ですので、これをそのまま返せば良いです。

[code]

    return [ここを書く]
    
[/code]

以上をまとめるとプログラムが書けます。念の為、完全に動作するプログラムを [Wandbox
に置いておきました](https://wandbox.org/permlink/kxfsVDwGz0oJFelP)ので、こちらも必要であればご覧ください。


CC BY-SA 4.0
2019-06-30T09:33:55.677
56257
2019-06-30T09:33:55.677
19110
56240
answer


宿題なら、多分違う書き方してほしいんだろうが、pythonを使えば、このように楽に取得できます：

[code]

    def get_min_index(items, start_index):
        min_value = min(items[start_index: ])
        min_value_index = start_index + items[start_index: ].index(min_value)
        return min_value_index
    
    samples = [1, 1, 3, 3, 5, 1, 3, 5, 9, 3]
    result_index = get_min_index(samples, 6)
    
    print(f'index={result_index}, value={samples[result_index]}')
    
[/code]

> index=6, value=3


CC BY-SA 4.0
2019-07-04T06:43:50.430
56373
2019-07-04T06:43:50.430
2314
56240
answer