UVA10025(The ? 1 ? 2 ? ... ? n = k problem)

来源:互联网 发布:大数据修炼系统醉寒 编辑:程序博客网 时间:2024/06/10 18:43
题意:±1 ± 2 ± 3 ±…± n = k , 找出满足条件的最小 n 。。

解析:

必然存在整数 x(1=< x <= n)满足:

当 s1 = 1+2+3+...+x+..+n >= k时,有 s2 = 1+2+3+...-x+..+n == k,即多出的x肯定在1~n之间。

s1 - s2 = s1 - k = 2x


所以,我们想求最小的n,也就是求最小的满足条件的s1,而它与k的差必为偶数,剩下的暴力找就可以了。

通过求和公式,求出前n个和比k大的n的最小值,然后判断前n个数的和与k的值的差是否为偶数,如果为偶数则表示该n为

小的所需个数,因为如果差为偶数,则只需将前n个数的几个数前的符号改为减号,就可以得到k,如果不为偶数,则n的

值加一,重复以上判断。直到出现符合以上判断的n的出现,则是最小的n的值。

#include <iostream>#include <string.h>#include <stdio.h>#include <math.h>using namespace std;int main(){    int t,k;    int flag=0;    scanf("%d",&t);    while(t--)    {        scanf("%d",&k);        if(flag>0) puts("");        flag++;        if(k<0) k=-k;        int sum=0;        for(int i=1;;i++)        {            sum+=i;            if(sum>=k&&(sum-k)%2==0)            {                printf("%d\n",i);                break;            }        }    }    return 0;}


 


 

原创粉丝点击