打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
存在一个数组,找出连续数之和最大的一段

#include<iostream>

using namespace std;

/************************************************************************/

/*6有一个数组a[n],里面的数只有两种:-11

ij是两个整数,假设0<=i<=j<=n-1,找出a[i]a[j]中连续数之和最大的部分(如果最大部分存在相等的则优先找最短的)。

                                                                    */

/************************************************************************/

 

#include <iostream>

using namespace std;

typedef struct node

{ 

       int begin;

       int end;

}Node;

 

void Find(int number[], int length)

{

       if(length == 0)//如果数组为空直接返回

              return;

       int Max = number[0], Acclulate = number[0];//初始化最大值为数组的第一个值

       Node *Position = new Node[length];//用于存取到当前位置可能的最大值

       Node MaxPosition = {0, 0};//初始化最大的起始位置和终止位置

       Position[0].begin = 0;

       Position[0].end = 0;

      

       for(int i = 1; i < length; i++)

       {

              if(Acclulate > 0)//前面的累积和大于零时,起始位置固定,而终止位置每次都往后移动一个位置

              {

                     Position[i].begin = Position[i - 1].begin;//起始位置固定,只需取前一个节点的值.begin即可

                     Position[i].end = Position[i - 1].end + 1;//终止位置每次都往后移动一个位置:前一个节点的值.end+1

                     Acclulate += number[i];//此时判断number[i]有效,计入 累积和Acclulate

                     if(Acclulate > Max)//如果 重新计算后的 累积和Acclulate大于 Max

                     {

                            Max = Acclulate;

                            MaxPosition = Position[i];//重新定位 最大的起始位置和终止位置

                     }

//                   cout<<"前面的累积和大于=>>";

//                   cout<<"起点number["<<MaxPosition.begin<<"]="<<number[MaxPosition.begin]

//                   <<",终点number["<<MaxPosition.end<<"]="<<number[MaxPosition.end]<<endl;

              }

              else//前面的累加和小于等于 零,  则重新设定起始位置和终止位置

              {

                     Position[i].begin = i;

                     Position[i].end = i;

                     Acclulate = number[i];

                     if(number[i] > Max)//如果当前number[i]大于Max,则重新设定起始位置和终止位置,否则保持不变

                     {

                            Max = number[i];

                            MaxPosition =  Position[i];

                     }

//                   cout<<"累加和小于等于=>>";

//                   cout<<"起点number["<<MaxPosition.begin<<"]="<<number[MaxPosition.begin]

//                   <<",终点number["<<MaxPosition.end<<"]="<<number[MaxPosition.end]<<endl;

              }

       }

       cout <<endl<< "最大的值为:" << Max << endl;

       cout <<"起点number["<<MaxPosition.begin<<"]="<<number[MaxPosition.begin]

              <<",终点number["<<MaxPosition.end<<"]="<<number[MaxPosition.end]<<endl;

       cout << "他们分别为:";

       for( i = MaxPosition.begin; i <= MaxPosition.end; i++)

              cout << number[i] <<" ";

       cout << endl;

 

       delete [] Position;

      

}

 

int main(void)

{

       /************************************************************************/

       /*最大的值为:5

起点 number[0]=3,终点number[8]=1

他们分别为:3 -1 -1 1 1 -1 1 11

       */

       /************************************************************************/

//     inta[10]={3,-1,-1,1,1,-1,1,1,1,-1};//总数是从09

 

       /************************************************************************/

       /* 最大的值为:4

       起点number[3]=1,终点 number[8]=1

       他们分别为:1 1 -1 11 1

       */

       /************************************************************************/

       //inta[10]={2,-1,-1,1,1,-1,1,1,1,-1};//总数是从09

 

 

       /************************************************************************/

       /*最大的值为:3

起点 number[0]=3,终点number[0]=3

他们分别为:3

 

       */

       /************************************************************************/

       //inta[10]={3,-1,-1,-1,1,-1,1,1,1,-1};//总数是从09

 

       /************************************************************************/

       /*最大的值为:3

起点 number[6]=1,终点number[8]=1

他们分别为:1 1 1

       */

       /************************************************************************/

       //inta[10]={2,-1,-1,-1,1,-1,1,1,1,-1};//总数是从09

      

       /************************************************************************/

       /*

最大的值为:-1

起点 number[1]=-1,终点 number[1]=-1

他们分别为:-1

Press any key to continue

       */

       /************************************************************************/

       int a[10]={-2,-1,-1,-1,-1,-1,-1,-1,-1,-1};//总数是从09

      

       Find(a, 10);

       return 0;

}

 

 

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++
贪吃蛇游戏源代码(C++)
c++ vector用法(1)
273 类的作用域
通讯录排序
关于24点游戏的编程思路与基本算法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服