通用版1.L - Delta-wave

xiaoxiao2021-02-28  43

#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int a,b,x1,y1,z1,x2,y2,z2,res,n,m; while(~scanf("%d%d",&n,&m)){ //a=sqrt(n); a=(int)(sqrt((double)n-1))+1; // b=sqrt(m); b=(int)(sqrt((double)m-1))+1; x1=(a*a-n)/2+1; y1=a; z1=(n-(a-1)*(a-1)-1)/2+1; x2=(b*b-m)/2+1; y2=b; z2=(m-(b-1)*(b-1)-1)/2+1; res=abs(x1-x2)+abs(y1-y2)+abs(z1-z2); if(res<0)res=-1*res; // printf("%d,%d,%d,%d,%d,%d\n",x1,y1,z1,x2,y2,z2); printf("%d\n",res); } return 0; }

在三角形中建立一个坐标系,x,y,z轴沿如图所示建立,可以求出每个点的坐标

这样每个点就有了唯一的坐标,比如n==2时,n的坐标是(2,2,1),要确定某一个点的坐标,要计算坐标,先算出n在第几行,也就是y轴坐标,然后可以知道该行第一个数a和最后一个数b,(n-a)/2+1是n的x轴坐标,(b-n)/2+1是z轴坐标

计算出两点坐标后,对应坐标相减后取绝对值,然后加起来,就是两点距离。

转载请注明原文地址: https://www.6miu.com/read-2623666.html

最新回复(0)