• 7F


    甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形: 



    甜甜的好朋友蜜蜜发现上面的图还是有点规则的,于是他问甜甜:在你画的图中,我给你两个点,请你算一算连接两点的折线长度(即沿折线走的路线长度)吧。

    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

    // 根据两点的位置关系递归
     1 #include<stdio.h>
     2 #include<math.h>
     3 
     4 double length(int x1, int y1, int x2, int y2)
     5 {
     6     double s=0;
     7     int t;
     8     if(x1>x2)
     9     {
    10         t=x1; x1=x2; x2=t;
    11         t=y1; y1=y2; y2=t;
    12     }
    13     if(x1==x2&&y1==y2) return s;
    14     else
    15     {
    16         if(x1==0&&y1==0)
    17         { s++; y1++; }
    18         if(x1==0&&y2==0&&(y1-x2)==1)
    19         {
    20             s+=sqrt(y1*y1+x2*x2);
    21             return s;
    22         }    
    23         else if(x2-x1==y1-y2)
    24         {
    25             s+=(x2-x1)*sqrt(2.0);
    26             return s;
    27         }
    28         else
    29         {
    30             if(x1==0)
    31             {
    32                 s+=sqrt((y1-1)*(y1-1)+y1*y1);
    33                 x1=y1-1; y1=0;
    34             }
    35             else
    36             {
    37                 if(x1+y1>x2+y2)
    38                 {
    39                     s+=x1*sqrt(2.0);
    40                     y1+=x1; x1=0;
    41                 }
    42                 else
    43                 {
    44                     s+=x2*sqrt(2.0);
    45                     y2+=x2; x2=0;
    46                 }
    47             }
    48             return s+length(x1,y1, x2,y2);
    49         }
    50     }
    51 }
    52 
    53 int main()
    54 {
    55     int n, x1,y1, x2,y2;
    56     double s;
    57     scanf("%d", &n);
    58     while(n--)
    59     {
    60         scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
    61         s=length(x1,y1, x2,y2);
    62         printf("%.3f
    ", s);
    63     }
    64     return 0;
    65 }
    WA
    // 分别求两点到原点的距离,结果为其差的绝对值
     1 #include<stdio.h>
     2 #include<math.h>
     3 
     4 double length(int x, int y)
     5 {
     6     double s=0;
     7     int i;
     8     for(i=1;i<x+y;i++)
     9         s+=i*sqrt(2.0);
    10     s+=x*sqrt(2.0);                    // 斜率为-1的路径长度 
    11     for(i=0;i<x+y;i++)
    12         s+=sqrt(i*i+(i+1)*(i+1));    // 斜率非-1或斜率不存在的路径长度 
    13     return s;
    14 }
    15 
    16 int main()
    17 {
    18     int n, x1,y1, x2,y2;
    19     double s1, s2;
    20     scanf("%d", &n);
    21     while(n--)
    22     {
    23         scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
    24         s1=length(x1,y1); s2=length(x2,y2);
    25         printf("%.3f
    ", fabs(s1-s2));
    26     }
    27     return 0;
    28 }
    AC
    
    
  • 相关阅读:
    第四阶段学习总结
    第三阶段学习总结
    第二阶段学习总结
    第一阶段内容的学习总结
    第四单元及OO课程总结
    关于工具的碎碎念
    第三单元博客总结
    第二单元博客总结
    第一单元作业总结
    实验五 单元测试
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/10357104.html
Copyright © 2020-2023  润新知