oj 2073

题目:无限的路

2073.png

思路:先判断点的先后(这样可以使用后面的方法而无需多写一些不必要的代码) ,在计算相邻点的距离(这样可以避免点到点线距离的不同,无需采用一个数值代替进去,而是直接计算)
判断点先后的方法:x1+y1大于x2+y2的的点在前,相同的有规律: x1>x2&&y1<y2
判断下一个点是什么的方法:只令x1++,y1--,y1=0时开始有y=x+1,x=0,直到点到(x2,y2)结束。
一开始的思路是与前面思路相反的,导致在判断点先后时产生了一些错误。最后结果却出现了 Compilation Error的问题:
20731.png

原因则是出现在头文件的先后问题上。

#include<math.h>
#include<stdio.h>
int main(){
    double suan(int a1,int b1,int a2,int b2);
    int x1,x2,y1,y2,n,t;
    while(scanf("%d",&n)!=EOF){
        while(n--){
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            if(x1+y1>x2+y2) {
                t=x1; x1=x2; x2=t; t=y1; y1=y2; y2=t;
            }else if(x1+y1==x2+y2){
                if(x1>x2&&y1<y2){
                    t=x1; x1=x2; x2=t; t=y1; y1=y2; y2=t;
                }
            }
            double sum=0;
            while(y1>=0){
                int ji1=x1,ji2=y1;
                if(!(x1==x2&&y1==y2)){
                    if(y1>0) {
                        y1--;
                        x1++;
                    }
                    else {
                        y1=x1+1;
                        x1=0;
                    }
                }
                sum=sum+suan(ji1,ji2,x1,y1);
                if(x1==x2&&y1==y2) {
                    break;
                }

            }
            printf("%.3lf\n",sum);

        }
    }

}

double suan(int a1,int b1,int a2,int b2){
    double t = pow(a2-a1,2)+pow(b2-b1,2);
    t = sqrt(t);
    return t;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容