| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
请路过的人指点一下!万分感谢.#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
struct st
{
char Name[35];
double Pole;//纬度
double jingdu;//经度
} s[105];
int cmp(const void* a,const void* b)
{
return strcmp((*(st*)a).Name,(*(st*)b).Name);
}
int main()
{
double Pi=3.1415926;
int i=0;
int j,k;
while(scanf("%s",s[i].Name)!=EOF)
{
if(strcmp(s[i].Name,"#")==0)
break;
scanf("%lf%lf",&s[i].Pole,&s[i].jingdu);
s[i].Pole=s[i].Pole*Pi/180;//角度化弧度
s[i].jingdu=s[i].jingdu*Pi/180;
i++;
}
qsort(s,i,sizeof(s[0]),cmp);
char s1[35],s2[35];
while(scanf("%s%s",s1,s2)!=EOF)
{
if(strcmp(s1,"#")==0&&strcmp(s2,"#")==0)
break;
int sub=strcmp(s1,s2);
char s3[35];
if(sub==0)
printf("0 km\n\n");
else
{
if(sub>0)
{
strcpy(s3,s1);
strcpy(s1,s2);
strcpy(s2,s3);
} //要保证输入字符串的时候小的先找
double a,b,x,y;
for(j=0;j<i;j++)//找小的
{
if(strcmp(s1,s[j].Name)==0)
{
a=s[j].Pole;
b=s[j].jingdu;
break;
}
}
if(j<i)//找到了第一个字符串
{
for(k=j+1;k<i;k++)//找大的
{
if(strcmp(s2,s[k].Name)==0)
{
x=s[k].Pole;
y=s[k].jingdu;
break;
}
}
if(k<i)//两个都找到了
{
double dis=6378*acos(cos(a)*cos(x)*cos(b-y)+sin(a)*sin(x));//计算公式
printf("%.lf km\n\n",dis);
}
else//只找到第一个
printf("Unknown\n\n");
}
else//两个都没找到
printf("Unknown\n\n");
}
}
system("pause");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator