codeforces 11b 思维

题意:数轴上从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;
}

猜你喜欢

转载自blog.csdn.net/qq_38759433/article/details/86545046