设计思路:
在“整数数组中最大子数组求和01”的基础上完成本次实验。
本次实验的关键在于如何判断结束。
经设计,程序结束条件有两种:1.截取部分有重复;2.循环完整两次。
满足其中任一条件则循环结束。
代码:

1 //20160327 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 int arr[100]; 9 int NUM = 0; 10 int MAXSUM = 0; 11 int MINNUMend = 0; 12 int MINSUM = 0; 13 int SUM = 0; 14 int jump = 0; 15 int start = -1; 16 for (; NUM < 100; NUM++) 17 { 18 cin >> arr[NUM]; 19 if (getchar() == ' ') 20 { 21 break; 22 } 23 } 24 if (NUM == 100) 25 { 26 NUM = 99; 27 } 28 for (int i = 0;; i < NUM ? i++ : i = 0) 29 { 30 if (i == 0) 31 { 32 jump += 1; 33 if (jump == 3) 34 { 35 break; 36 } 37 } 38 if (start == i) 39 { 40 break; 41 } 42 SUM = min(SUM + arr[i], arr[i]); 43 if (MINSUM > SUM) 44 { 45 MINNUMend = i; 46 } 47 MINSUM = min(SUM, MINSUM); 48 if (start == -1) 49 { 50 start = 0; 51 } 52 if (SUM >= 0) 53 { 54 start = i; 55 } 56 } 57 SUM = 0; 58 jump = 0; 59 start = -1; 60 for (int i = MINNUMend;; i < NUM ? i++ : i = 0) 61 { 62 if (i == MINNUMend) 63 { 64 jump += 1; 65 if (jump == 3) 66 { 67 break; 68 } 69 } 70 if (start == i) 71 { 72 break; 73 } 74 SUM = max(SUM + arr[i], arr[i]); 75 MAXSUM = max(SUM, MAXSUM); 76 if (start == -1) 77 { 78 start = MINNUMend; 79 } 80 if (SUM <= 0) 81 { 82 start = i; 83 } 84 } 85 cout << "最大和:" << MAXSUM << endl; 86 return 0; 87 }
测试截图:
此次结对编程队友为 李娜。
http://www.cnblogs.com/linanil/p/5323599.html