python-糖果俱乐部(赛氪OJ)

[题目描述]
为了庆祝“华为杯”的举办,校园中开展了许多有趣的热身小活动。小理听到这个消息非常激动,他赶忙去参加了糖果俱乐部的活动。
该活动的规则是这样的:摊位上有 n 堆糖果,第 i 堆糖果有 ai​ 个,参与的同学可以选择其中的任意堆,当所选择糖果的总数为偶数就可以把它们都带走啦~
试问通过这个活动小理最多能在摊位上带走多少枚糖果。
输入格式:
输入共两行。
第1行 输入一个整数 n ,代表共有 n 堆糖果。
第2行 依次输入 n 个整数 ai​ ,代表每堆糖果的数量。
输出格式:
输出一个整数,代表小理最多能取得的糖果。
样例输入#1
4
1 2 3 4
样例输出#1
10
样例输入#2
8
10 11 10 10 10 10 10 10
样例输出#2
70
数据范围
对于 100% 的数据,保证 n≤100 且 ai​≤100000 。
来源/分类(难度系数:一星)


完整代码展示:
a=int(input())
b=list(map(int,input().split()))
c=[]
d=[]
for i in range(0,len(b)):
    if b[i]%2==0:
        c.append(b[i])
    else:
        d.append(b[i])
d.sort()
if len(d)%2==0:
    sum=sum(c)+sum(d)
else:
    sum=sum(c)+sum(d)-d[0]
print(sum)


代码解释:
a=int(input())
 b=list(map(int,input().split()))
 c=[]
 d=[]         
                                    ”,让用户输入糖果的堆数a。建立一个列表b,储存各堆糖果的具体糖果数。建立空列表c和d(各用来储存糖果数为偶数和奇数的糖果堆)。
for i in range(0,len(b)):
        if b[i]%2==0:
              c.append(b[i])
        else:
              d.append(b[i])
  ”,遍历列表b中元素(各糖果堆的糖果数),如果为偶数,则将其添加进列表c中;否则将其添加进列表d中。直至遍历完b中所有元素,循环结束。
d.sort()
 if len(d)%2==0:
     sum=sum(c)+sum(d)
 else:
     sum=sum(c)+sum(d)-d[0]
”,对列表d中元素进行升序排序,如果列表d的长度为偶数,则能带走的最多糖果数为列表c与列表d中所有元素的总和;否则能带走的最多糖果数为列表c与列表d中除第一项的所有元素的总和。(这里蕴含一个数学基本原理:奇数+奇数=偶数,偶数+偶数=偶数,奇数+偶数=奇数,因此欲求为偶数的最大总和,可先求出所有偶数的总和(列表c中所有元素的总和),再加上尽可能多的偶数个奇数的和(列表d中元素个数为偶数,全加;为奇数,不加最小的一项d[-1]))
print(sum)       ”,打印最终结果(为偶数的最大总和)。


运行效果展示:

9a8bba9756014ff091d5841df031e540.jpg

ebe5a85140534000a986a46077a4ed7f.jpg 

        (声明:以上内容均为原创) 

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪云-微星

感谢大家的支持与鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值