软件工程概论-合作作业01

一、要求

  求一整数数组(有负数)循环子数组之和的最大值。

二、思路

  1.从数组的后面排除小于0或者累加小于0的,用max记录被排除的子数组的和的最大值;

  2.循环则变化原数组,如{a0,a1,...an}则可以变化为{a0,a1,...an,a0,a1..an-1};

三、源代码

 1 #include <iostream>
 2 #include <iomanip>
 3 #include <vector>
 4 using namespace std;
 5 void showArray(vector<int> x)
 6 {
 7     if(x.size()==0)
 8         cout<<"NULL"<<endl;
 9     int len=x.size();
10     for(int i=0;i<len;i++)
11     {
12         cout<<setw(5)<<x[i];
13     }
14     cout<<endl;
15 }
16 int sonArrMax(vector<int> array)
17 {
18     if(array.size()==0) return -59659;
19     int len=array.size();
20     int maxNum=0;
21     int sum=0;
22     for(int i=0;i<len-1;i++)
23     {
24         array.push_back(array[i]);
25     }
26     len=array.size();
27     for(int i=0;i<len;i++)
28     {
29         sum+=array[i];
30         if(sum>maxNum)
31         {
32             maxNum=sum;
33         }
34         if(sum<0)
35         {
36             sum=0;
37         }
38     }
39     return maxNum;
40 }
41 
42 void main()
43 {
44     vector<int> array;
45     int arr[]={1,2,-3,0,7,-8,5};//测试数组
46     for(int i=0;i<7;i++)
47         array.push_back(arr[i]);
48     /*int x,number;
49     cout<<"数组长度:"<<endl;
50     cin>>number;
51     cout<<"输入"<<number<<"个整数:"<<endl;
52     for(int i=0;i<number;i++)
53     {
54         cin>>x;
55         array.push_back(x);
56     }*/
57     cout<<"该数组为:"<<endl;
58     showArray(array);
59     cout<<"最大环子数组和为:"<<sonArrMax(array)<<endl;
60 }
View Code

四、实验结果

  

 

posted @ 2017-03-31 19:18  遗风遗风丶  阅读(126)  评论(0编辑  收藏  举报