【座標系での向きの変わる移動】STEP: 4 座標系での規則的な移動 (paizaランク B 相当) 解答例 – PHP編【Aランクレベルアップメニュー】
【Aランクレベルアップメニュー】 > 【座標系での向きの変わる移動】STEP: 4 座標系での規則的な移動 (paizaランク B 相当)
※リンク先へ移動する為には「paiza」へのログインが必要です。
かなり苦労した問題でした。答えを導くための方法が思いつかなったんですよね。
結局辿り着いた方法は、「移動歩数に対する、x座標とy座標の変化分の配列」を先に作成しておいて、初期位置の座標から、歩数分の座標を変化させることでした。
解答例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php $input = explode(" ",trim(fgets(STDIN))); $targetx = $input[0]; //初期x座標 $targety = $input[1]; //初期y座標 $x = 0; $y = 0; $move = $input[2]; //歩数 $flag = 0; //移動向きを管理するフラグ $array[] = "0 0"; for($i = 1;$i < 50;$i++){ //歩数による座標変化の配列を作成 if($flag == 0){ for($j =0 ; $j < $i; $j++){ $x++; $array[] = $x." ".$y; } for($j =0 ; $j < $i; $j++){ $y++; $array[] = $x." ".$y; } $flag =1; } elseif ($flag ==1) { for($j =0 ; $j < $i; $j++){ $x--; $array[] = $x." ".$y; } for($j =0 ; $j < $i; $j++){ $y--; $array[] = $x." ".$y; } $flag =0; } } //print_r($array); $target = explode(" ",$array[$move]); //歩数に対する座標の変化分を取得 $movex = $target[0]; //x座標の変化分を取得 $movey = $target[1]; //y座標の変化分を取得 $ansx = $targetx + $movex; //初期x座標から歩数分のx座標を変化させる $ansy = $targety + $movey; //初期y座標から歩数分のy座標を変化させる echo $ansx." ".$ansy; 答えを出力する ?> |
