Problem:
宝探し II

蔵を片付けていたら、先祖の宝のありかへの行き方を記した古文書が見つかりました。この古文書にはおおよそ次のような事が書かれていました。

1. まず、町外れの井戸から、真東に 1m の地点に立ち、まっすぐ井戸の方向を向け。
2. 右回りに 90 度向きを変え、1m 直進したら、まっすぐ井戸の方向を向け。
3. 右回りに 90 度向きを変え、1m 直進したら、まっすぐ井戸の方向を向け。
4. 〃
5. 〃
6. ：

2 行目以降は、全く同じことが書かれていました。あなたは、宝を探そうと思いましたが、厄介なことに気がつきました。昔と違い建物が邪魔をしていて、まっすぐ井戸の方向をむこうにも井戸が見えなかったり 1m 直進しようにも直進できなかったりします。さらに、この古文書ときたら、1000 行近くあり、古文書どおりの作業をすることは、かなりの時間と体力が要ります。しかしながら、幸運なことに、あなたはコンピュータを利用することができます。

古文書に書かれている行数 n を入力して、宝のありかを出力するプログラムを作成してください。ただし、 n は 2 以上 1,000 以下の正の整数とします。

入力

複数のデータセットが与えられます。各データセットとして、古文書の行数を表す１つの整数 n が１行に与えられます。

入力は -1 で終わります。データセットの数は 50 を超えません。

出力

町外れの井戸から東に x (m)，北に y (m)の位置に宝があるとして、
各データセットごとに以下の形式で出力して下さい。

x
y

出力は実数とし、0.01 以下の誤差を含んでもよい。

Sample Input

3
6
-1

Output for the Sample Input

0.29
1.71
-2.31
0.80

参考

n =2, 3, 4, 5, 6 の宝の位置

Solution in JAVA (judge verdict: Accepted)

import java.io.*;

class Point {
	double x,y;
	Point(double x,double y) {
		this.x = x;
		this.y = y;
	}
}

class Vec {
	double x,y;
	Point s,e;
	Vec(Point p1,Point p2) {
		this.s = p1;
		this.e = p2;
		this.x = p2.x-p1.x;
		this.y = p2.y-p1.y;
	}
	Vec(Vec v1,Vec v2) {
		this.x = v2.x-v1.x;
		this.y = v2.y-v1.y;
	}
	Vec(double x,double y) {
		this.x = x;
		this.y = y;
	}
	Vec rotate() {
		return new Vec(this.y/Size(),(-1)*this.x/Size());	
	}
	double Size() {
		return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2));
	}
	void arrange(Vec r) {
		this.x *= -1;
		this.y *= -1;
		this.x += r.x;
		this.y += r.y;
		this.x *= -1;
		this.y *= -1;
	}
}

class Main {
	public static void main(String args[]) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String buf;

		try {
			while (!(buf = br.readLine()).equals("-1")) {
				int n = Integer.parseInt(buf);
				double x = -1.0;
				double y = 0.0;
				Vec v1 = new Vec(x,y);
				for (int i=2;i<=n;i++) {
					Vec v2 = v1.rotate();
					v1.arrange(v2);
				}
				System.out.println((-1)*v1.x);
				System.out.println((-1)*v1.y);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}