UVA10025连续自然数添上正负号得到固定的数

来源:互联网 发布:淘宝 苹果证书 编辑:程序博客网 时间:2024/06/10 04:12

这题自己想的是找出大于k的最小的n使n*(n+1)>=k即可,如果n*(n+1)-k为偶数肯定可以把后面的一个数变成负号即可,

如果是奇数则可以添加俩项一正一副把差值变成偶数,可是却忽略了如果n原本是偶数只需要再添加一个数就可以把差值变成

偶数。

#include<cstdio>#include<iostream>#include<vector>#include<queue>#include<algorithm>#include<string>#include<cstdlib>#include<map>#include<set>#include<cmath>#include<cstring>#include<cctype>#include<climits>#include<memory>#include<climits>using namespace std;#define LL long long#define INT (1<<31)-1;const int maxn=1000;int main(){    LL cas;    cin>>cas;    while(cas--)    {        LL k;        cin>>k;        k=abs(k);        int ans;        LL i;        for(i=1;i<=100000;i++)        {            if(i*(i+1)/2>=k)                break;        }        LL sum=i*(i+1)/2;        if((sum-k)%2)        {            if(i%2)                cout<<i+2<<endl;            else                cout<<i+1<<endl;        }        else            cout<<i<<endl;        if(cas)            cout<<endl;    }    return 0;}


0 0
原创粉丝点击