![見出し画像](https://assets.st-note.com/production/uploads/images/9609303/rectangle_large_type_2_774ba53f71769c8c9a138c9c58c15175.jpeg?width=1200)
(37)できるだけ少ない知識で解きたい人用「配列の要素A[0],A[1],…,A[9]に正の整数kを格納する。kとして16,43,73,24,85を順に格納したとき,85が格納される場所は」
次の規則に従って配列の要素A[0],A[1],…,A[9]に正の整数kを格納する。kとして16,43,73,24,85を順に格納したとき,85が格納される場所はどこか。ここで,x mod yはxをyで割った剰余を返す。また,配列の要素は全て0に初期化されている。
〔規則〕
(1):A[k mod 10]=0ならば,kをA[k mod 10]に格納する。
(2):(1)で格納できないとき,A[(k+1) mod 10]=0ならば,kをA[(k+1) mod 10]に格納する。
(3):(2)で格納できないとき,A[(k+4) mod 10]=0ならば,kをA[(k+4) mod 10]に格納する。
ア A[3] イ A[5] ウ A[6] エ A[9]
配列をイメージしておかなければ。配列は全て0で初期化されているそうなので、こうなる。
この一つ一つのスペースに、整数を入れていく。それがk。
kは、16, 43・・・85と示されている。
kをどのスペースに入れるかを決めるとき、〔規則〕を使う。
示されたkがどこに入るのかを順番に調べていく。modというのは割り算の余りを出すもの。
まず16から。
(1):A[16 mod 10] ・・・ 16を10で割った余りは6だから、A[6]に入れる。
次は43。
(1):A[43 mod 10] ・・・ 43を10で割った余りは3だから、A[3]に入れる。
次は73。
(1):A[73 mod 10] ・・・ 73を10で割った余りは3だから、A[3]に入れたいけど、入れようと思ったスペースが0じゃないからダメ。すでに43が入っちゃってる。で、(2)へ。
(2):A[(73+1) mod 10]・・・74を10で割った余りは4だから、A[4]に入れる。
次は24。
(1):A[24 mod 10] ・・・ 24を10で割った余りは4だから、A[4]に入れたいけど、そのスペース0じゃないからダメ。もう73が入ってる!だから(2)へ。
(2):A[(24+1) mod 10]・・・25を10で割った余りは4だから、A[5]に入れる。
次は85。
(1):A[85 mod 10] ・・・ 85を10で割った余りは5だから、A[5]に入れたいけど、そこには24が入ってるからダメ。(2)へ。
(2):A[(85+1) mod 10]・・・86を10で割った余りは6だから、A[6]に入れたいけど、ここも0じゃないからダメ。(3)へ。
(3):A[(85+4) mod 10]・・・89を10で割った余りは9だから、A[9]に入れ
85を入れる場所が見つかった。