杭电2073

此题是一道找规律的问题,只要在找的时候细心一下,轻松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;
}
     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值