[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>19問目

19問目(三角関数、場所探し)

問題

北を向いた状態から次のように進め
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結果に気を付けてください。

ソースコード

お持ち帰り

C/C++

#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);

しかし、この方法ではサンプルと同じ結果が出ませんでした。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-5-28
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>19問目