zoukankan      html  css  js  c++  java
  • 杭电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;
    }
         

  • 相关阅读:
    Java 泛型 泛型的约束与局限性
    Java 泛型 泛型方法
    Java 泛型 泛型数组
    Java 泛型 协变性、逆变性
    Java 泛型 协变式覆盖和泛型重载
    Java 泛型 泛型代码和虚拟机
    Insertion Sort List
    Remove Duplicates from Sorted List II
    String to Integer (atoi)
    SpringMvc源码入门
  • 原文地址:https://www.cnblogs.com/xiohao/p/2745295.html
Copyright © 2011-2022 走看看