杰克最近正在努力锻炼他的跳跃技能。当前他正站在X坐标轴原点上。他想跳到坐标(x,0)上,为了达到训练效果,他决定首次跳跃的距离是1,之后每一次跳跃的距离将会比上一次跳跃的距离大1个单位。每一次跳跃,他可以选择往左或者往右跳。他很好奇至少要经过多少次跳跃才能到达终点。
输入
单组测试数据。 输入数据只包含整数x(-10^9<=x<=10^9)。
输出
输出杰克到达终点所需要的最少的跳跃次数。
输入样例
2
输出样例
3
本来以为这道题很难的,结果发现是个规律,就是重点的奇偶性和起点的是一样的,那么我们就不断的向目标方向跳过去,直到奇偶性和目标一样并且大于等于目标,那么我们开始可以通过改变之前的跳跃方向达到目标。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<queue>
#include<string>
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int x;
scanf("%d",&x);
long long sum=0,ans;
if (x<=0) x=-x;
for (int i=1; i<=100000; i++)
{
if (sum>=x&&sum%2==x%2)
{
ans=i-1;
break;
}
else
{
sum+=i;
}
}
printf("%lld\n",ans);
return 0;
}