北电第二题答案(自己做的……)

#include <stdio.h>

#include <iostream.h >

int MaxSumOutput(int seq[],int n)

{

     int MaxSum = seq[0];

     

     for(int i = 0;i < n;i++)

     {

         if(seq[i] < 0)

         {

              if(seq[i] > MaxSum)

              {

                   MaxSum = seq[i];

              }

         }

         else

         {

              int s = seq[i];

              if(MaxSum < s)

                   MaxSum = s;

              for(int j = i + 1;j < n;j++)

              {

                   s += seq[j];

                   if(s < 0)

                   {

                       i = j;

                       break;

                   }

                   else

                   {

                       if(s > MaxSum)

                            MaxSum = s;

                   }

              }

         }

     }

     

     return MaxSum;

}

int main()

{

     int a[] = {1,2,3,4,5};

     int b[] = {-2,11,-4,13,-2,-5};

     int c[] = {7,8,-16,2,4,-2,15,-14,7,-3,-1};

     int d[] = {-5,-2,-3,-7};

     

     cout << MaxSumOutput(a,5);

     cout << "/n";

     cout << MaxSumOutput(b,6);

     cout << "/n";

     cout << MaxSumOutput(c,11);

     cout << "/n";

     cout << MaxSumOutput(d,4);

     

     getchar();

     

     return 0;

}

这个是自己做的,昨晚回去和同学讨论,他还有一个更好的,用了所谓的动态规划算法(-_-!!),很不错,等下要了发上来。

可能会有问题,没有大量测试,欢迎提出更好的算法。 

相关链接:2007广东北电笔试题目 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值