题意:数轴上从0出发可向左右走,第i步的距离为i,求到达x的最小步数
题解:考虑一直向右,若恰好到达则为最小步数;
若路程大于x,且(路程-x)=n,n为偶数,则应向左移动距离n;
要向左移动距离n,只需在第n/2步向左走;步数不变;
若(路程-x)为奇数,一直走到偶数的情况;
#include <bits/stdc++.h>
using namespace std;
int n, m, sum;
int main(){
int i;
while(scanf("%d", &n) != EOF){
if(n < 0)
n = -n;
sum = 0;
for(i = 0; ; i ++){
sum += i;
if(sum == n) break;
if(sum > n && (sum - n) % 2 == 0) break;
}
printf("%d\n", i);
}
return 0;
}