HOME»基本情報技術者試験掲示板»平成31年春期午後問11
投稿する

[4446] 平成31年春期午後問11

 Mobさん(No.1) 
設問1のbに関して、解説によるとwidthを使ってmazeDateを加工する必要があると書いてありますが、mazeData を width で割った商の整数部がy座標、mazeData を width で割った余りをx座標とする、という部分について理解が得られないので、どなたか解説していただけないでしょうか。
2022.09.23 16:43
jjon-comさん(No.2) 
FE シルバーマイスター
String mazeData の内容は長さ49文字の文字列。
"********..*..**S**.***.....******.**G....********"

StringクラスのindexOf()メソッドは,引数で渡された文字が文字列中に最初に現れた位置を返す。長さ49文字の文字列の中にその文字が含まれていたなら,返される値は0〜48のいずれか。
int index = mazeData.indexOf('S');

Locationクラスは 2つの整数xとyを内部に持つ。
〔プログラム4〕
public class Location {
  public final int x, y;
  public Location(int x, int y) {
    this.x = x;
    this.y = y;
  }
}

次の行は,indexの値0〜48から「図1 本問で扱う迷路」のxとyを求めて,Locationクラスの引数として渡している。xが index [  b  ] width で,yが index / width。
return new Location(index [  b  ] width, index / width);

indexが 0, 1, 2, 3, 4, 5, 6のとき
       "*  *  *  *  *  *  *"
    xは 0, 1, 2, 3, 4, 5, 6 にしたい。

indexが 7, 8, 9,10,11,12,13のとき
       "*  .  .  *  .  .  *"
    xは 0, 1, 2, 3, 4, 5, 6 にしたい。

indexが14,15,16,17,18,19,20のとき
       "*  S  *  *  .  *  *"
    xは 0, 1, 2, 3, 4, 5, 6 にしたい。

(以下省略)

上記のxを求める計算式は「indexをwidth=7で割った余り」これが[空欄b]。
2022.09.24 01:02
 Mobさん(No.3) 
解説ありがとうございました。
2022.09.24 14:37

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop