这个题思路是先求1+2+3+……+n>k的最小n,然后判断1+2+……+n的和减去k是否为偶数,若为偶数,则n即为所求,若不是,则n++重复刚才的判断。把k都当做正数做,它们只差了个符号,在本题没有影响。 程序代码: #include<iostream> #include<cmath> using namespace std; int main() { int m, n, num; cin>>m; while(m--){ cin>>n; if(n == 0){ cout<<3<<endl; if(m) cout<<endl; continue; } n = (int)fabs(n); num = (int)sqrt(n); while(1){ if(num * (num + 1) >= 2 * n ){ if(!(num & 1) && !((num / 2 * (num + 1) - n) & 1)){ //避免num * (num + 1)直接相乘益处 break; }else if((num & 1) && !(((num + 1) / 2 * num - n) & 1)) break; } num++; } cout<<num<<endl; if(m) cout<<endl; } return 0; }