POJ 1844 Sum

这一题看上去很复杂,其实思路很简单。

从1加到N直到和sum为n或者刚好大于n,如果相等就直接输出了。

sum>n时,如果sum-n为奇数,则不管怎么改都不能实现,因为任意改一个数减少量必然为偶数,这时候N++。

如果sum-n为偶数,更改1~N前的符号减少量分别为2,4,6~~2N,必然可以使sum==n。

求和公式是sum=N(N+1)/2,可以用sqrt(2*n)得到接近结果的值。

#include <cstdio>
#include <cmath>
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		int res,t;
		int m=(int)sqrt(2*n);
		while((t=m*(m+1)/2)<n||(t-n)%2==1)m++;
		printf("%d\n",m);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值