HDOJ 1030 Deltawave

找规律的题,对每一个数字对应一个三维坐标(X,Y,Z)

X::表示在第几层
Y:从左边的边数在第几个
Z::从右边的边数在第几个

对倒三角要特殊处理(Z减一)

如:1(1,1,1)   2(2,2,1)    3(2,1,1)

距离就是坐标差点绝对值。

 1 #include <iostream>
 2 #include <cmath>
 3 
 4 using namespace std;
 5 
 6 struct Note
 7 {
 8     int x;
 9     int y;
10     int z;
11 };
12 
13 int main()
14 {
15     Note a,b;
16     int m,n;
17 while(cin>>m>>n)
18 {
19 
20     int sa=0;
21     int sb=0;
22     int k;
23     int t=ceil(sqrt(m));
24     a.x=t;
25     k=(m-(t-1)*(t-1))/2;
26     a.y=t-k;
27     k=((2*t-1)-m+(t-1)*(t-1))/2;
28     a.z=t-k;
29     if((2*t-1-m+(t-1)*(t-1))%2==0)  sa=1;
30     if(sa==0) a.z=a.z-1;
31 
32     t=ceil(sqrt(n));
33     b.x=t;
34     k=(n-(t-1)*(t-1))/2;
35     b.y=t-k;
36     k=((2*t-1)-n+(t-1)*(t-1))/2;
37     b.z=t-k;
38     if((2*t-1-n+(t-1)*(t-1))%2==0)  sb=1;;
39     if(sb==0)  b.z=b.z-1;
40 
41     //cout<<a.x<<" "<<a.y<<" "<<a.z<<endl;
42     //cout<<b.x<<" "<<b.y<<" "<<b.z<<endl;
43 
44     int ans=0;
45     ans=abs(a.x-b.x)+abs(a.y-b.y)+abs(a.z-b.z);
46 
47     cout<<ans<<endl;
48 }
49 
50 
51     return 0;
52 }
原文地址:https://www.cnblogs.com/CKboss/p/3014178.html