算法日记1

1.最大的卡牌价值

思路:贪心,在list1列表中添加b[i] - a[i]然后排序,最后根据k的变化加

n,k = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))
sum1 = 0
list1 = []
for i in range(len(a)):
    sum1 += a[i]
    if a[i] < b[i]:
        list1.append(b[i] - a[i])
list1.sort(reverse=True)
if k >= len(list1):
    for j in list1:
        sum1 += j
else:
    for j in range(k):
        sum1 += list1[j]


print(sum1)

2.珠宝的最大交替和

思路:找出奇数中最小的和偶数中最大的,最大减最小,若小于零则输出原本值,否则输出原本值减去2*(最大减最小),注意n等于0的情况

n = int(input())
a = list(map(int,input().split()))
if n == 1:
    print(abs(a[0]))
else:
    list1 = []
    list2 = []
    sum1 = 0
    for i in range(len(a)):
        a[i] = abs(a[i])
        if i % 2 == 0:
            sum1 += a[i]
            list1.append(a[i])
        else:
            list2.append(a[i])
            sum1 -= a[i]
    min_list1 = min(list1)
    max_list2 = max(list2)
    if max_list2 > min_list1:
        print(sum1 + 2 * (max_list2-min_list1))
    else:
        print(sum1)

3.小蓝的礼物

思路:先加,加到超过了再看用卷能不能使总数加1

import math

n,k = map(int,input().split())
a = list(map(int,input().split()))
shu = 0
sum11 = 0
a.sort()
for i in range(len(a)):
    sum11 += a[i]
    if sum11 > k:
        sum11 -= a[i]
        if sum11 + math.ceil(a[i] / 2) <= k:
            shu += 1
            break
        else:
            break
    shu += 1
print(shu)

4.鸡哥的购物挑战

思路:先加,若sum的数量为偶数则直接输出,若为奇数有两种情况,例如5 5 5 5 5 -1,5 5 5 5 1 -3,前者加上-1答案为24,后者·把一删去答案为20.

n = int(input())
a = list(map(int,input().split()))
a.sort(reverse=True)
sum = 0
q = 0
w = 0
for i in range(len(a)):
    if a[i] >= 0:
        q += 1
        sum += a[i]
    else:
        w = a[i]
        break
if q % 2 == 0:
    print(sum)
else:
    if w == 0:
        print(sum-a[q-1])
    else:
        if a[q-1] > abs(w):
            print(sum+w)
        else:
            print(sum-a[q-1])

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值