javaデータ構造でロボット走行を実現
ある少年宮はロボットの小型車を導入しました。あらかじめ入力したコマンドを受けて、命令どおりに行動することができます。乗り物の基本的な動作は簡単です。左に曲がって、右に曲がって(Rと表記します)、前に何センチぐらい歩いてください。
例えば、私達は小型車に以下のような指令を入力することができます。
15 L 10 R 5 LRR 10 R 20
じゃ、乗用車はまずまっすぐ15センチ行って、左に曲がって、10センチ歩いて、また右に曲がってください。
この指令群に対して、小型車が再び出発地に戻ったことが分かります。
あなたのタスクは:プログラムを作成し、ユーザーがコマンドを入力し、プログラムは実行後の小型車の位置と命令実行前の小型車の位置との直線距離を出力します。
【入出力フォーマット要求】
ユーザはまず整数n(n<100)を入力し、次にn個の命令があることを示している。
次にn個の命令を入力します。各コマンドはL、Rと数字だけで構成されます。数字は0から100までの整数です。
各コマンドの長さは256文字を超えません。
プログラムはn行の結果を出力します。
各結果は、乗用車が対応する指令の前後の位置の直線距離を実行することを示しています。四捨五入を小数第二位までお願いします。
例えば、ユーザ入力:
5
L 100 R 50 R 10
3 LLL 5 RR 4 L 12
LL
100 R
5 L 5 L 5 L 5
プログラム出力:
102.96
9.06
0.00
100.00
0.00
コード:
例えば、私達は小型車に以下のような指令を入力することができます。
15 L 10 R 5 LRR 10 R 20
じゃ、乗用車はまずまっすぐ15センチ行って、左に曲がって、10センチ歩いて、また右に曲がってください。
この指令群に対して、小型車が再び出発地に戻ったことが分かります。
あなたのタスクは:プログラムを作成し、ユーザーがコマンドを入力し、プログラムは実行後の小型車の位置と命令実行前の小型車の位置との直線距離を出力します。
【入出力フォーマット要求】
ユーザはまず整数n(n<100)を入力し、次にn個の命令があることを示している。
次にn個の命令を入力します。各コマンドはL、Rと数字だけで構成されます。数字は0から100までの整数です。
各コマンドの長さは256文字を超えません。
プログラムはn行の結果を出力します。
各結果は、乗用車が対応する指令の前後の位置の直線距離を実行することを示しています。四捨五入を小数第二位までお願いします。
例えば、ユーザ入力:
5
L 100 R 50 R 10
3 LLL 5 RR 4 L 12
LL
100 R
5 L 5 L 5 L 5
プログラム出力:
102.96
9.06
0.00
100.00
0.00
コード:
import java.util.*;
class FuShu
{
public double real;
public double image;
public FuShu()
{
real = 0;
image = 0;
}
public FuShu(double r, double i)
{
real = r;
image = i;
}
public FuShu dot(FuShu x)
{
FuShu r = new FuShu();
r.real = real * x.real - image * x.image;
r.image = real * x.image + image * x.real;
return r;
}
public FuShu dot(double r, double i)
{
FuShu t = new FuShu();
t.real = real * r - image * i;
t.image = real * i + image * r;
return t;
}
}
class Robot
{
private int x = 0;
private int y = 0;
private FuShu dir = new FuShu(1,0);
public void walk(String s)
{
int sum = 0;
for(int i=0; i<s.length(); i++)
{
char c = s.charAt(i);
if(c=='L' || c=='R')
{
x += sum * dir.real;
y += sum * dir.image;
sum = 0;
if(c=='L')
dir = dir.dot(0,1);
else
dir = dir.dot(0,-1);
}
else
sum = sum * 10 + (c-'0');
}
x += sum * dir.real;
y += sum * dir.image;
}
public void show()
{
double d = Math.sqrt(x*x + y*y);
System.out.println(x+","+y + " dir: " + dir.real + "," + dir.image + ", d=" + d);
}
}
public class Walk
{
public static void main(String[] args) throws Exception
{
Robot t = new Robot();
t.walk("3R4");
t.show();
}
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。