こんにちは、情報系大学生のハル(Blog_IT_haru)です。
今回は、paizaラーニングの、データセット選択メニューの第2回、複数回のランダムアクセスについてC言語での解き方を解説していきます。
サンプルコードも掲載してありますので、勉強の参考にしていただければと思います。
また、私自身も初心者であるため、今後解けない問題が出てきた際は記事の更新が滞るかもしれませんが、ご了承下さい。
すぐコードを見たい方は以下のもくじから、サンプルコードで見ることができます。
問題
問題の閲覧・回答は以下のページで行えます。
問題の引用
以下は、上記ページより引用させていただきました。
入力される値
N入力値最終行の末尾に改行が1つ入ります。
A1 A1 ... A_N
Q
B1 B2 ... B_Q
文字列は標準入力から渡されます。期待する出力
答えの数値を出力してください。
Ans1末尾に改行を入れ、余計な文字、空行を含んではいけません。
Ans2
...
Ans_Q
条件すべてのテストケースにおいて、以下の条件をみたします。
* N, Q は 1 以上 100 以下
* A の各要素の値は 1 以上 100 以下
* B の各要素の値は 1 以上 N 以下
- 入力例1
5
10 20 30 40 50
3
2 4 1
- 出力例1
20
40
10
- 入力例2
3
7 8 9
5
3 3 3 3 3
- 出力例2
9
9
9
9
9
解説
この問題も、STEP: 1同様、配列を用いて解く問題です。
しかし、STEP: 1よりは少し難しい内容になっています。
入力される値のNは、配列Aの要素数、Qは、配列Bの要素数、配列A,Bは、それぞれ配列に入る値が指定されています。
Aの配列の何番目の数字を抜き取るか?というのが配列Bに格納されています。
そのため、出力される値は、配列A[配列B[添字]]の値です。
今回はこの理解が難しかったかもしれません。
二重配列になっているので、難しく感じると思いますが、やっていることはさほど難しくはありません。
では、コードを書いていきましょう。
サンプルコード
わかりやすいように、問題文の文字そのままで変数を設定しました。
まず、前回同様、int型で変数の宣言を行います。
A,Bそれぞれの要素数は、問題文の条件より、1以上100以下とわかるので、A[100],B[100]と宣言します。
次に、scanfを用いて、値を読み取って、変数または配列に格納していきます。
for文で読み取るときは、1からスタートします。
0からにすると正しく出力できない恐れがあるので注意しましょう。
また、for文の継続条件も、<ではなく、<=であることにも注意しましょう。
最後に、for文で、出力したら完了です。
このときは、配列Bの要素数であるQ回ループを回せばよいですね。
まとめ
いかがでしたか?
前回同様、paizaラーニングのデータセット選択メニューの問題の解説を行いました。
C言語でpaizaラーニングの問題集の記事を書いている方が中々いなかったので、これからちょくちょく書いていけたらな、と思います。
これは私のアウトプットでもありますし、更に誰かのお役に立てたら幸いです。
この記事がいいな、と思ってくれたら、SNSなどで拡散したり、
ブックマークやコメントなどしてくれると励みになります!
更に、読者になってくれたら、お返しに私も読者になります!
また、この記事のコードをコピペしても、上手く行かない、などありましたら、
お問い合わせ、コメント、TwitterのDMなどによろしくお願いします。
それでは。