题目链接:http://poj.org/problem?id=1844
题意:给一个整数n,求当n由1到k的连续整数加或减组成时的最小的k。
如果n全部由加法组成,那么k可以组成k(k+1)/2,设减掉的部分为s,则有k(k+1)/2-2s=n 所以当n-k(k+1)是偶数即可;
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; #define N 2100 #define INF 0x3f3f3f3f #define met(a) memset(a, 0, sizeof(a)) int main() { int n; while(scanf("%d", &n)!=EOF) { int sum=0; for(int i=1;;i++) { sum+=i; if(sum>=n && (sum-n)%2==0) { printf("%d ", i); break; } } } return 0; }