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