此题是一道找规律的问题,只要在找的时候细心一下,轻松ac应该是没问题的!!
此题的规律不止一个,这里我说一下我解题的规律吧!
我分了3步来计算!!
1)如果两个点在一条直线上,那么两点间的坐标满足(x1+y1)==(x2+y2),这时两点间的距
离是s=s1*fabs(x1-x2);
2)如果两点不在一条直线上,并且两点在斜率为(-1)的直线上的距离为:
{ for(i=(x1+y1);i<(x2+y2);i++)
s=s+sqrt(i*i+(i+1)*(i+1)); }
3)如果两点不在一条直线上,并且两点在斜率为不为(-1)的直线上的距离为:
{ for(j=(x1+y1+1);j<(x2+y2);j++)
s=s+j*s1; }
祝你成功ac!!呵呵!
对了,此题还应该注意一下,由于输入的两个点的大小不确定,应先判断大小,如果不是
由小到大的顺序,应该先交换一下,这里用到了swap(a,b);函数,在头文件中加入
#include <algorithm>即可!!
#include<iostream>
#include<cmath>
#include <algorithm>
using namespace std;
int main()
{
int N,x1,y1,x2,y2,i,j;
double s,s1=sqrt(2);
cin>>N;
getchar();
while(N--)
{
cin>>x1>>y1>>x2>>y2;
if ((x1+y1)>(x2+y2))
{
swap(x1, x2);
swap(y1, y2);
}
if((x1+y1)==(x2+y2))
s=s1*fabs(x1-x2);
else
{
s=(y1+x2)*s1;
for(i=(x1+y1);i<(x2+y2);i++)
s=s+sqrt(i*i+(i+1)*(i+1));
for(j=(x1+y1+1);j<(x2+y2);j++)
s=s+j*s1;
}
printf("%.3lf\n",s);
}
return 0;
}