麻烦看看哪里出错了,代码过一部分测试点,怎么也找不到解决办法
地球的半径是6440公里。有许多人造卫星围绕着地球运行。如果两颗人造卫星对地球中心形成一个夹角,您能计算出这两颗人造卫星之间的距离吗?距离分别以圆弧距离(arc distance)和直线弦距离(chord distance)来表示。这两颗人造卫星是在同一轨道上(本题设定这两颗人造卫星是在一条圆形路径上,而不是在椭圆路径上,绕地球运行)。
输入输出格式
输入格式
输入包含一个或多个测试用例。.
每个测试用例一行,给出两个整数s和a,以及一个字符串”min”或”deg”;其中s是人造卫星与地球表面的距离,a是这两颗人造卫星对地球中心的夹角。以分(′),或者以度(◦),为单位。输入不会既给出分,又给出度。
输出格式
对于每个测试用例,输出一行,给出两个卫星之间的圆弧距离和直线弦距离,以公里为单位。距离是一个浮点数,保存小数点后的六位数字。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define R 6440
#define P 3.14159265358979323846
int main()
{
double a=0,s=0,arc=0,cho=0;
char angle[4]={0};
while(scanf("%lf %lf %s",&s,&a,angle)!=-1)
{
if(angle[0]=='m') a=a/60;
a=a*P/180;
if(a>P)a=2*P-a;
arc=(s+R)*a;
cho=2*(s+R)*sin(a/2);
printf("%.6lf %.6lf",arc,cho);
}
return 0;
}
应该是当两个卫星之间的角度大于180度时,需要转为小于180度的角;
然后将角度转弧度,需要放在计算完圆弧距离之后。
修改如下:
参考链接:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define R 6440
#define P 3.14159265358979323846
//#define P 3.1415926
int main()
{
double a=0,s=0,arc=0,cho=0;
char angle[4]={0};
while(scanf("%lf %lf %s",&s,&a,angle)!=-1)
{
// printf("s=%f,a=%f,angle=%s\n",s,a,angle);
// 如果输入的角度单位为分,转为对应的角
if(angle[0]=='m') a=a/60;
// printf("a=%f\n",a);
// 如果两个卫星之间的角度大于180度,转为小于180度的角
if (a>180){
a=360-a;
}
// https://baike.baidu.com/item/%E5%BC%A7%E9%95%BF%E5%85%AC%E5%BC%8F/6024564
// 求两个卫星直线的圆弧距离
arc=a*(s+R)*P/180;
// https://zhidao.baidu.com/question/240987150.html
// 角度转弧度
a=a*P/180;
// https://zhidao.baidu.com/question/991326303167887139.html
// 求两个卫星之间的直线距离
cho = 2*(s+R)*sin(a/2);
// arc=(s+R)*a;
// cho=2*(s+R)*sin(a/2);
printf("%.6lf %.6lf\n",arc,cho);
}
return 0;
}
【以下回答由 GPT 生成】
该代码已经是一个完整的解决方案了,没有明显的问题需要解决。代码中通过输入卫星与地球表面的距离s,两颗人造卫星对地球中心的夹角a以及角度单位(分或度),然后通过一系列计算,得到圆弧距离(arc distance)和直线弦距离(chord distance)。最后,使用printf函数将计算结果输出。
【相关推荐】
可恶!我的代码在本地的测试是对的,到平台上就不对了!然后重启,再用我写的代码就通过了!!!不通过的时候都要自闭了!可恶的平台!