Jumping Jack

题目描述:

杰克最近正在努力锻炼他的跳跃技能。当前他正站在X坐标轴原点上。他想跳到坐标(x,0)上,为了达到训练效果,他决定首次跳跃的距离是1,之后每一次跳跃的距离将会比上一次跳跃的距离大1个单位。每一次跳跃,他可以选择往左或者往右跳。他很好奇至少要经过多少次跳跃才能到达终点。

Input
单组测试数据。
输入数据只包含整数x(-10^9<=x<=10^9)。
Output
输出杰克到达终点所需要的最少的跳跃次数。

思路:

无论正负,步数均相同,因此只考虑一种符号即可(正数和零或负数和零)

设目标为(x, 0),已走距离为 s,则当 s > x 并且 s - x 为偶数时,只需要在第 (s-x) / 2 步向左走

当(s-x) 为奇数时 继续走

代码如下:

#include<iostream> 
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{        
    int enter, begin = 1, time, set = 0, i;
    for ( enter = 0; enter < 21; enter++){    
        if (enter < 0) enter = -enter;        
        set = 0;
        for (i = 0;; i++) {
            set += i;
            if (set == enter) break;            
            if (set > enter && (set - enter) % 2 == 0) break;            
        }
        cout << enter << "->" << i << endl;
    }
    return 0;
}

题目出处:

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1615

posted @ 2017-09-26 00:48  Intro1997  阅读(283)  评论(0编辑  收藏  举报