zoukankan      html  css  js  c++  java
  • cf 11B Jumping Jack(贪心,数学证明一下,,)

    题意:

    给一个数X。

    起始点为坐标0。第1步跳1格,第2步跳2格,第3步跳3格,.....以此类推。

    每次可以向左跳或向右跳。

    问最少跳几步可以到坐标X。

    思路:

    假设X是正数。

    最快逼近X的方法是不停向右走。如果越过了X,假设到了X1,则必有X1-X小于最后一步d。

    如果X1-X是偶数,将之前的某个x变为-x。则可以到X。

    如果X1-X是奇数,因为将之前的某个x变为-x,实际是后退2x格。所以必定要再向右走一步。直到X1-X是偶数。(其实只要走一步或两步)

    X是负数的情况和X是正数的情况一样。

    代码:

    ll  x,d;
    
    
    int main(){
    
        cin>>x;
        if(x==0){
            puts("0");
            return 0;
        }
        if(x<0){
            x=-x;
        }
        d=1;
        while(d*(d+1)/2<x) ++d;
        if(d*(d+1)/2==x){
            printf("%I64d
    ",d);
        }
        else{
            ll x1=d*(d+1)/2;
            ll deta=x1-x;
            if(deta%2==0){
                printf("%I64d
    ",d);
            }
            else{
                while(deta%2!=0){
                    ++d;
                    x1+=d;
                    deta=x1-x;
                }
                printf("%I64d
    ",d);
            }
        }
    
        return 0;
    }
  • 相关阅读:
    php面试题-2
    排序算法-1
    php面试题-1
    ES6基础-4
    ES6基础-3
    mysql优化-1
    ES6基础-2
    vuecli 项目进行gzip压缩 使页面加载速度更快
    vueCli3 项目创建时,git bash 箭头选择无效问题
    gulp4简单用法和问题总结
  • 原文地址:https://www.cnblogs.com/fish7/p/4309563.html
Copyright © 2011-2022 走看看