北を向いた状態から次のように進め
56,65
97,54
64,-4
上のような情報を元にしてたから探しをします。二つ一組の数字で「最初の数字の分だけすすみ、2番目の数の分だけ右に回る(負数の場合は左)」ということを示しています。それを入力の分だけ繰り返します。
進む量は[m]、まわる量は「度」と考えます。出力は「東へx[m]、北へy[m]」という形で表します。西、南の場合には負数になります。出力は整数出だしてください。
入力データはのカレントフォルダの019.batに保存されています。
詳しくは原文参照でお願いします
移動量(100以下の正の整数),回転角度(-180以上180以下の整数)(半角カンマ区切り)
x(整数)
y(整数)
56,65
97,54
64,-4
55,76
42,-27
43,80
87,-86
55,-6
89,34
98,5
0,0
171
-305
三角関数を使って解きます。x,yの符号sin,cos結果に気を付けてください。
#include <stdio.h> #include <math.h> int main(){ FILE *fp; double x,y; int ang,len,sang; fp = fopen("019.dat","r"); fscanf(fp,"%d,%d\n",&len,&ang); x = y =0; sang =90; while(len !=0 || ang !=0){ x += cos(((double)sang) * 3.14159/180) * len; y += sin(((double)sang) * 3.14159/180) * len; sang -= ang; fscanf(fp,"%d,%d\n",&len,&ang); } fclose(fp); printf("%d\n%d\n",(int)x,(int)y); return 0; }
この問題、よく読んでいなかったせいで結構悩みました。問題はちゃんと読みましょう。
他に、この問題の出力精度でちょっと引っかかりました。出力では最初次のようにしていました。
printf("%.0f\n%.0f\n",x,y);
しかし、この方法ではサンプルと同じ結果が出ませんでした。