A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 来明坤 中级黑马   /  2012-8-9 01:31  /  1827 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int sum=0;
bool flag=true;
for(int i=1;i<=m;i++)
{
   if(flag)
      sum+=i;
   else
      sum-=i;
   flag=!flag;
}  
return sum;    这个是我写的    还有更简便的方法吗

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

倒序浏览
if(m%2==0)
       sum=(-1)*(m/2);
else
       sum=m-(m-1)/2;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
楼上正解。
我觉得在做这种累加的时候,完全可以把数学上的方法加进去,就是程序中的算法,
将这个累加和分析,就可以分为最后一项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)了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
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;
        }
单独写的一个方法,很简单,也很好理解吧

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
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 );
    }
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马