数组求最大值

设计思想:输入一个个数为n的数组,①如果第一个数为负数则直接略过,从下一个数开始算,如若开始连续碰到负数则从遇到第一个正整数开始计算,若正数下一个数是正数则直接相加,若是负数则相加后与0比较,如果大于0就继续相加,小于0就重新开始程序。②如果数组里全是负数则取最大数。

遇到的问题:没有考虑全是负数的情况。

解决方案:全是负数找最大的一个负数,如果最大的数是负数, 就输出这个数。

源代码:

#include<iostream>

using namespace std;

int main ()

{

 int a[1000],max,max1,count,temp,num; //a[num]输入数组,max暂存最大值,count子数组的和

 count=0;

 max=0;

 temp=0;

 cout<<"请输入数组的个数:";

 cin>>num;

 cout<<"请输入"<<num<<"个整数(可正可负):\n"; //输入数组的值

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

  cin>>a[i];

 max1=a[0];

 for (int i=0;i<num;i++) //进行一次循环

 {

  while(a[i]<0&&count==0&&i<num) //如果a[i]<0并且count==0表示最初开始,或者已经存储了一个temp的值,可以跳过所有的负数

  {

    if(max1<a[i])

    max1=a[i];

    i++;

  }

  count+=a[i]; //进行累加                

    if(count<=(-a[i+1])) //如果累加的和比下一个数的相反数小则可以确定不能再继续累加

    {

     temp=count; //暂存count

     count=0;

    }

  

   if(max<=temp&&count!=0) //暂存最大值

   {

    max=temp;

   }

   if(count==0||count>max1)

   {

    max=max1;

   }

 }

   cout <<"子数组的最大和为"<<max<<endl;

   system("pause");

   return 0;

 

}

总结:这次作业让我们学到了很多,虽然遇到了很多问题,但是我们都解决了它。这些问题刚开始都没发现,最初我们想的太简单,等越做作业发现的问题越多,也就需要想办法去解决它,虽然比较麻烦,但我们最终还是解决了问题。

转载于:https://www.cnblogs.com/yikechaguazi/p/9786861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值