关闭

nyoj 215 sum

511人阅读 评论(0) 收藏 举报

题意:给定一个数n,在1+2+3+4+…+k中,求随意改变加减号能使其和(差)正好为n的k为多少。

如果sum正好等于n则累加到这个k正好为答案;
如果sum大于n时,则需要把前面的加号改为减号:如果改为-1,结果就减2,如果改为-2,结果就减4,以此类推,可以看出只要sum-n为偶数,则此时可以改sum结果为n,得答案。

#include<stdio.h>
int main()
{
	int n,k,s,i;
	while(scanf("%d",&n)!=EOF)
	{
		k=0;
		if(n==0) break;
		for(i=1;;i++)
		{ k+=i;
		if(k==n) {printf("%d\n",i);break;}
		if(k>n&&(k-n)%2==0) 
		{ printf("%d\n",i);break;}
		}
	}
	return 0;
}

大牛的代码,先存下来,位运算。。

#include<stdio.h>
int main()
{
    int m,sum,i;
    while(scanf("%d",&m)!=EOF)
    {
        for(i=0,sum=0;(sum<m || (sum-m)&1);sum+=++i);
        printf("%d\n",i);
    }
}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:120582次
    • 积分:2058
    • 等级:
    • 排名:第19293名
    • 原创:73篇
    • 转载:16篇
    • 译文:6篇
    • 评论:27条
    最新评论