題意是說一羣酒友玩最大連續和的遊戲,誰先找到一串數字的最大連續和,誰就不用付錢。所以很直白,題目就是從一串數字中找出最大連續和,並輸出。輸入的數字序列的長度N,範圍1<=N<=100000,每個數字的取值範圍是-1000<=X<=1000
Python版本的代碼,但是效率真的是沒辦法,可能還是我的python代碼還有待提高。
try:
while True:
InputList = input().split()
NumLen = len(InputList)
if NumLen == 0:
break
NumList = [0]
S = [0]
for i in range(NumLen):
NumList.append(int(InputList[i]))
Min_Sum = 0
Max_Sum = 0
for i in range(NumLen+1):
if i == 0:
continue
S.append(S[i-1] + NumList[i])
for i in range(NumLen+1):
if i == 0:
continue
if Max_Sum < S[i] - Min_Sum:
Max_Sum = S[i] - Min_Sum
if Min_Sum > S[i]:
Min_Sum = S[i]
print(Max_Sum)
except Exception as e:
pass
C++版本代碼
#include <iostream>
#include<cstdio>
#include<sstream>
using namespace std;
//#define ZANGFONG
const int maxn = 100010;
int A[maxn],S[maxn];
int main()
{
#ifdef ZANGFONG
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif // ZANGFONG
int N,i,MINS,MAXS;
string line;
while(getline(cin,line))
{
istringstream iss(line);
i = 1;
while(iss) iss >> A[i++];
N = i-1;
MINS = S[0] = 0;
for(i = 1; i <= N; i++) S[i] = S[i-1] + A[i];
MAXS = 0;
for(i = 1; i < N; i++)
{
if(MAXS < S[i] - MINS) MAXS = S[i] - MINS;
if(MINS > S[i]) MINS = S[i];
}
cout << MAXS << endl;
}
return 0;
}