题目:
众所周知,wy学姐心灵手巧,她最近在学习原画,立志往国风和赛博朋克风格发展。
绘画的工具是很重要哒!
于是思量再三+长期吃土后,她买了一支biulingbiuling~闪的魔法棒画笔,由于刚刚接触,wy学姐还没有领悟到其中的奥秘所在,她只会以普通画笔的方式去使用它。
wy学姐决定用它来练习画直线,于是她在平面直角坐标系中画出了如下的图形:
善于思考的wy学姐发现!她随手一画的图竟然是有点规则的!!OMG!!!
于是她决定考考你是否也发现了这个神奇美妙的规则,是否感悟到了数学的诱人的魅力和本质?
wy学姐会随机给出两个点,要求你算出连接两点的折线长度(即沿折线走的路线长度)。
Input
第一个数是正整数N(≤100)。代表数据的组数。
每组数据由四个非负整数组成x1,y1,x2,y2;所有的数都不会大于100。
Output
对于每组数据,输出两点(x1,y1),(x2,y2)之间的折线距离。注意输出结果精确到小数点后3位。
Sample Input
5 0 0 0 1 0 0 1 0 2 3 3 1 99 99 9 9 5 5 5 5
Sample Output
1.000 2.414 10.646 54985.047 0.000
解说:
题目的意思是求点与点之间的距离但是需要走特定的曲线,需要一些数学的逻辑推理,在一个一个例子之中找到规律;
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i;
double s[201];
s[0]=0;
for(i=1;i<=200;i++)
s[i]=s[i-1]+sqrt(1.0*(i-1)*(i-1)+1.0*i*i)+sqrt(1.0*i*i+1.0*i*i);
//这一句的意思是计算每一个在x轴的点距离原点的距离;
int t;
scanf("%d",&t);
while(t--)
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
int m;//将r作为第一个点距离原点的距离,z是第二个;
double r,z;
m=x1+y1-1;//计算该点的下划线x轴的坐标;
if(x1==0&&y1==0)
r=0;
else
r=s[m]+sqrt(1.0*m*m+(1.0*m+1)*(1.0*m+1))+sqrt(1.0*x1*x1+1.0*x1*x1);
m=x2+y2-1;
if(x2==0&&y2==0)
z=0;
else
z=s[m]+sqrt(1.0*m*m+(1.0*m+1)*(1.0*m+1))+sqrt(1.0*x2*x2+1.0*x2*x2);
printf("%.3f\n",fabs(z-r));
}
return 0;
}