黑马程序员技术交流社区
标题:
1-2+3-4+……+m 实现方法 求助
[打印本页]
作者:
来明坤
时间:
2012-8-9 01:31
标题:
1-2+3-4+……+m 实现方法 求助
int sum=0;
bool flag=true;
for(int i=1;i<=m;i++)
{
if(flag)
sum+=i;
else
sum-=i;
flag=!flag;
}
return sum; 这个是我写的 还有更简便的方法吗
作者:
lsle
时间:
2012-8-9 06:44
if(m%2==0)
sum=(-1)*(m/2);
else
sum=m-(m-1)/2;
作者:
化宝峰
时间:
2012-8-9 08:57
楼上正解。
我觉得在做这种累加的时候,完全可以把数学上的方法加进去,就是程序中的算法,
将这个累加和分析,就可以分为最后一项m是奇数还是偶数来分析了,可以变换为这样的式子:
m是奇数:1-2+3-4+5-6+...+(m-2) - (m-1) + m
m是偶数:1-2+3-4+5-6+...+(m-1) - m
从首项开始的,将数列2项为一组,可以发现,每一组的结果都是-1,所以求和的结果也就是需要确定,有多少个-1求和。
如果m是奇数,则前面共有(m-1)/2组 -1 的组合,加上这个奇数m,结果就是(m-1)/2 *(-1) + m
如果m是偶数,则就是总共有(m)/2组 -1 的组合,结果就是 (m)/2 * (-1)了。
m判断是奇数还是偶数,当然是对2求模(m%2==0)了
作者:
肖攀
时间:
2012-8-9 09:40
static int a(int m)
{
int sum1 = 0, sum2 = 0, sum = 0;
for (int i = 1; i <= m; i += 2) //1+3+5+7.........
{ sum1 += i; }
for (int i = 2; i <= m; i += 2) //-2-4-6-8...........
{ sum2 -= i; }
return sum = sum1 + sum2;
}
单独写的一个方法,很简单,也很好理解吧
作者:
许庭洲
时间:
2012-8-9 09:49
using System;
class Test
{
static void Main()
{
int oddSum = 0; //奇数和
int evenSum = 0; //偶数和
int m=100;
int sum=0;
for(int i=1;i<=m;i++)
{
if(i%2==0) //如果能被2整除的,累加偶数位的数据
evenSum += i;
else //否则就累加奇数位的数据
oddSum += i;
}
sum = evenSum - oddSum ;
Console.WriteLine("奇数和减去偶数和为:{0}",sum );
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2