AOJ0076 Treasure Hunt II
問題リンク Treasure Hunt II
- 解法
点(x, y)から次の地点に進むまでの大きさ(dx, dy)を求めれば勝ちです。
原点を中心に(x, y)を反時計回りに90度回転させて(X, Y)とします。
X = x*cos90 - y*sin90 = -y
Y = x*sin90 + x*cos90 = x
です。この(X, Y)ベクトルが次の地点に進むまでの方角です。
あとはこの方角に1m進めばいいので、XとYをベクトルの大きさで割って正規化します。
すなわち
dx = -y/sqrt(x*x+y*y)
dy = x/sqrt(x*x+y*y)
となります。あとはこのサイクルをN-1回繰り返すだけです。
- ソース
import java.util.Scanner; //Treasure Hunt II public class AOJ0076 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(true){ int n = sc.nextInt(); if(n==-1)break; double x = 1; double y = 0; for(int i=2;i<=n;i++){ double d = Math.sqrt(x*x+y*y); double dx = -y/d; double dy = x/d; x+=dx; y+=dy; } System.out.printf("%.2f\n%.2f\n", x, y); } } }