• 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
    ") ; 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
    ",2*n-1) ;
    22         else if(dis-k<n+1)printf("%d
    ",2*n) ;
    23         else printf("%d
    ",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

  • 相关阅读:
    自我介绍
    币值转换
    打印沙漏
    对我影响最大的三位老师

    pta
    pta-3
    学习计划
    对我有影响的三个老师
    介绍自己
  • 原文地址:https://www.cnblogs.com/shaughn/p/3432194.html
Copyright © 2020-2023  润新知