zoukankan      html  css  js  c++  java
  • uva 846

    找出步數與距離的關係即可得解。

    • 0步最多能抵達的距離是0
    • 1步最多能抵達的距離是1(1)
    • 2步最多能抵達的距離是2(1 1)
    • 3步最多能抵達的距離是4(1 2 1)
    • 4步最多能抵達的距離是6(1 2 2 1)
    • 5步最多能抵達的距離是9(1 2 3 2 1)
    • 6步最多能抵達的距離是12(1 2 3 3 2 1)
    • ……以此類推
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 #define ERROR 1e-10
     5 using namespace std;
     6 int main(){
     7     int n, x, y;
     8     int dis, step;
     9     while( scanf( "%d", &n ) != EOF ){
    10         for( int i = 0 ; i < n ; i++ ){
    11             scanf( "%d%d", &x, &y );
    12 
    13             dis = y-x;
    14             if( dis == 0 ){
    15                 printf( "0
    " );
    16                 continue;
    17             }
    18 
    19             step = (int)(sqrt((double)dis)+ERROR);
    20             if( step * step == dis ) step = step * 2 - 1;
    21             else if( step * step + step < dis ) step = step * 2 + 1;
    22             else step = step * 2;
    23 
    24             printf( "%d
    ", step );
    25         }
    26     }
    27     return 0;
    28 }

    另:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int x, y;
     7     int testCases;
     8     int min_steps = 0;
     9     cin >> testCases;
    10     while(testCases --)
    11     {
    12         cin >> x >> y;
    13         int difference = y - x;
    14         min_steps = 0;
    15 
    16         if(difference != 0)
    17         {
    18             int sumOfSteps = 0;
    19             int z = 2; //divided by 2, it represents the size if the next step
    20 
    21             while(difference > sumOfSteps)
    22             {
    23                 sumOfSteps += (z / 2); // next step
    24                 min_steps ++;
    25                 z++;
    26             }
    27         }
    28         cout << min_steps << endl;
    29     }
    30     return 0;
    31 }
     1 #include<cstdio>
     2 #include<cmath>  
     3 
     4 int main(void)
     5 {
     6     int t, x, y, diff, n;
     7     scanf("%d", &t);
     8     while (t--)
     9     {
    10         scanf("%d%d", &x, &y);
    11         diff = y - x;
    12         if (diff == 0)
    13             puts("0");
    14         else
    15         {
    16             n = (int)sqrt(diff);
    17             diff -= n * n;
    18             if (diff == 0)
    19                 printf("%d
    ", (n << 1) - 1);
    20             else if (diff <= n)
    21                 printf("%d
    ", n << 1);
    22             else
    23                 printf("%d
    ", (n << 1) + 1);
    24         }
    25     }
    26     return 0;
    27 }  
  • 相关阅读:
    用 C# 获取 IE 临时文件(转)
    vs2008打包程序需要.net3.5支持问题的解决方案
    关于使用ssh账号上外网
    元数据管理技术及发展应用现状
    一个拨号上网的批处理文件
    windows下启动和关闭oracle数据库的bat脚本
    Solaris下配置网络
    开启windows 2000 server上的远程桌面
    FileZilla客户端使用TIPs
    学习使用gvim
  • 原文地址:https://www.cnblogs.com/aze-003/p/5143222.html
Copyright © 2011-2022 走看看