黑马程序员技术交流社区

标题: 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