見出し画像

(37)できるだけ少ない知識で解きたい人用「配列の要素A[0],A[1],…,A[9]に正の整数kを格納する。kとして16,43,73,24,85を順に格納したとき,85が格納される場所は」

#基本情報技術者試験 #平成25年 #秋期 #問7 #配列

次の規則に従って配列の要素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を入れる場所が見つかった。

この記事が気に入ったらサポートをしてみませんか?