分蛋糕
题目描述:一块长方体蛋糕被分成了n小块,每小块上都有草莓,如下图所示。
你只能从这块长方体蛋糕中,拿走连续的3小块。
已知每小块蛋糕上的草莓数量,请计算你最多能拿到几颗草莓。
输入:
第一行一个正整数,为蛋糕被分成的小块数量n(4<=n<=20);
第二行,按字符串形式输入n个正整数(大小在1~20范围内),相邻两个正整数用一个空格分隔,每个正整数表示一小块蛋糕上的草莓数量。
提示:
s = input() #输入一个字符串,赋值给s
a = s.split(' ') #将字符串s按空格拆分,保存到列表a中
lis = [int(i) for i in a] #将列表a的元素转换成整数,保存到列表lis中
输出:
一个正整数,表示你拿连续的3小块蛋糕,最多能得到的草莓总数。
输入样例:
7
2314212
输出样例:
8
参考答案:
#参考程序1:
n = int(input())
s = input()
a = s.split(' ')
lis = [int(i) for i in a]
ans = 0
for i in range(n - 3 + 1): #取长度为3的子数组
ans = max(ans, sum(lis[i : i + 3])) #求子数组和,打擂台求最大
print(ans)
#参考程序2(校验用):
n = int(input())
s = input()
a = s.split(' ')
lis = [int(i) for i in a]
lis.insert(0, 0)
Pre = [0] * (n + 1) #Pre[i]是列表前i项和
ans = [0] * (n + 1) #ans[i]是以i结尾的连续3块蛋糕的草莓数量
for i in range(1, n + 1):
Pre[i] = Pre[i - 1] + lis[i]
for i in range(3, n + 1):
ans[i] = Pre[i] - Pre[i - 3]
print(max(ans))