uva 846
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int x , y , t; 6 scanf("%d",&t) ; 7 while(t--) 8 { 9 scanf("%d%d",&x,&y) ; 10 int dis = y-x ; 11 if(dis==0){printf("0\n") ; continue ;} 12 int n = 1 ,k; 13 while(1) 14 { 15 k = n*n ; 16 if(dis>k)n++; 17 else break; 18 } 19 n-- ; 20 k = n*n ; 21 if(k==dis)printf("%d\n",2*n-1) ; 22 else if(dis-k<n+1)printf("%d\n",2*n) ; 23 else printf("%d\n",2*n+1) ; 24 } 25 return 0 ; 26 }
假如走的方式为:1+2+3……+(n-1)+ n +(n-1)……+2+1
此时 dis(走的总距离) = n^2
当走的方式为:1+2+3……+(n-1)+ n + ( n + 1) + n +(n-1)……+2+1
则此时 dis = ( n+1 )^2 = n^2 + 2*n + 1
所以当:dis - n^2==0 时 steps( 走的步数 ) = 2 * n -1
n^2< dis <= n^2 + n 时 steps = 2 * n
n^2 + n < dis - n^2 <= n^2 + 2*n + 1 时 steps = 2 * n +1
还有其他方法 貌似也挺好的 :http://www.cppblog.com/syhd142/articles/131861.html?opt=admin