2008年11月8日土曜日

第5問 解答例

第5問(8点)です。
第4問は論理バグが取れないので、ちょっと止めました。

#include<stdio.h>
#include<math.h>

#define pi 3.141592
#define R 6378.1
int main(void){
float a,b,c,d,e;
float A,B,C,D;
while(scanf("%f %f %f %f",&a,&b,&c,&d),!(a==-1 && b==-1 && c==-1 && d==-1)){
A=a*pi/180;B=b*pi/180;C=c*pi/180;D=d*pi/180;
e=pow(cos(C)*cos(D)-cos(A)*cos(B),2) + pow(cos(C)*sin(D)-cos(A)*sin(B),2)+pow(sin(C)-sin(A),2);
printf("%0.0lf\n",R*acos(1-0.5*e));
}
return 0;
}

これは8点ですが、球面座標がわかってれば非常に易しい。

0 件のコメント: