环形一维数组最大子集(结对)

一,题目要求

一维数组首尾连接,形成的环形数组,求出最大子集的和。

二,分析

一维数组的首尾相连,我将其数组先后顺序不变,依次将第一个数放在数组最后得到一个不同排列的数组,数组个数不变,左右元素不变。求出其最大值,最后进行比较出最大的。

 1 #include<iostream>
 2 #include<math.h>
 3 using namespace std;
 4 void Input(int A[],int n)//输入数组
 5 {
 6       cout << "按顺序输入整数数组:"<<endl<<"   ";
 7       for (int i = 0; i < n; i++)
 8       {
 9           cin >> A[i];
10       }
11 }
12 int *Xiugai(int *A,int n)//环形数组的每一个展开的条形数组
13 {
14     int t;
15     t = A[0];                      //将第一个数放到最后,后面的数位置不变
16     for (int i = 0; i < n; i++)
17     {
18         A[i] = A[i + 1];
19     }
20     A[n-1] = t;
21     return A;
22     
23 }
24 int Max(int A[],int n)//条形数组的子数组最大值
25 {
26     int sum,max_sum;
27     
28     sum = A[0], max_sum = A[0];
29     for (int i = 1; i<n; i++)
30           {
31               if (sum>0)    //从第二个数开始判断是否为正数
32                   {
33                       sum = sum + A[i];  //是正数,将和值(初始值为p【0】)和第i+1个数做和。
34                      if (sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum,并将子数组末位置改变。
35                            {
36                                max_sum = sum;
37                            }
38                   }
39               else
40                   {
41                       sum = A[i];  //是负数,将第i+1个数的值赋值给和值sum
42                          if (sum>max_sum)//并判断是否为最大,是让其赋值给max_sum,并将子数组初、末位置改变。
43                              {
44                                  max_sum = sum;
45                               }
46                   }
47            }
48     return max_sum;
49 }
50 int Max1(int A[],int n)//比较最大值
51 {
52     int max_sum;
53     for (int i = 0; i < n - 1; i++)
54     {
55         if (A[i] < A[i + 1])
56         {
57             max_sum = A[i + 1];
58         }
59         else
60         {
61             max_sum = A[i];
62         }
63     }
64     return max_sum;
65 }
66 int main()
67 {
68     int n,max_sum;
69     cout << "输入数组的个数:";
70     cin >> n;
71     int *B = new int[n];
72     int *A = new int[n];
73         Input(A,n);
74         for (int i = 0; i < n; i++)
75         {
76             B[i] = Max(A,n);
77             A[n] = (int)Xiugai(A,n);
78         }
79         cout <<"环形数组最大值为:"<<Max1(B,n)<< endl;
80     system("pause");
81 }

posted @ 2018-11-01 19:29  冰-焰  阅读(211)  评论(0)    收藏  举报