#include <stdio.h> #include <stdlib.h> int main() { int this_sum, max_sum, old_first, old_last, new_first; int n,i, tmp, flag = 1; int first = 1; int *data; scanf("%d", &n); this_sum= max_sum = old_first = new_first = 0; old_last = n - 1; data = (int *)malloc(n * sizeof(int)); for(i = 0; i < n; i ++) { scanf("%d", &data[i]); } for(i = 0; i < n; i++) { this_sum += data[i];/*向右累加*/ if(first)//第一次找到最大的和 { if(this_sum >= 0) { first = 0; old_first = old_last = i; } } if(flag)//獲取新的this_sum的開頭 { if(this_sum >= 0) { flag = 0; new_first = i; } } if(this_sum > max_sum) { max_sum = this_sum;/*發現更大的和,則更新當前結果*/ old_last = i; if(new_first != old_first) { old_first = new_first; } } else if(this_sum < 0)/*假設當前子序列和為負*/ { this_sum = 0;/*則不可能使后面的和增大,拋棄之*/ flag = 1; } } printf("%d %d %d\n", max_sum, data[old_first], data[old_last]); return 0; }
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
