这道题刚开始抓破头脑也想不出怎么做。后来从0到10写了一遍就发现了一些规律。
当且仅当n满足如下情况才是我们要求的n:
(1):sum=1+2+3+.....+n>=k
(2):(sum-k)%2==0(即sum与k的差为偶数。)
(3):对于任何m<n,m不同时满足上面两条。(即保证n是最小的那个数)
第一条很显然,第二条略加证明如下:
因为sum>k,所以一定有sum-x=k,
即1+2+3+......+n-x=k,
1+2+3++...-x/2+...+n-x/2=k,
因为x/2一定是整数,所以x一定是偶数。
就拿12举个例子:
1+2+3+4+5+6+7=28; 28-12=16(16是偶数)
即1+2+3+4+5+6+7-16=1+2+3+4+5+6+7-8-8=2+3+4+5+6-8=12
得 -1+2+3+4+5+6-7=12
(因为如果一个数变为负的话,相当于和减去二倍的那个数)
作者才疏学浅,证明不甚严谨,如有疏漏,还望不吝指教。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main(){
long long k,sum;
int t,i;
scanf("%d",&t);
while(t--){
sum=0;
scanf("%lld",&k);
k=labs(k);
for(i=1;;i++){
sum=sum+i;
if(sum>=k)
if((sum-k)%2==0)
break;
}
printf(t>0?"%d\n\n":"%d\n",i);
}
return 0;}