算法题-- 02--Python解法

算法题-- 01–Python解法

1. 买蛋糕

小团的蛋糕铺长期霸占着美团APP中“蛋糕奶茶”栏目的首位,因此总会吸引各路食客前来探店。

小团一天最多可以烤n个蛋糕,每个蛋糕有一个正整数的重量。

早上,糕点铺已经做好了m个蛋糕。

现在,有一个顾客要来买两个蛋糕,他希望买这一天糕点铺烤好的最重的和最轻的蛋糕,并且希望这两个蛋糕的重量恰好为a和b。剩余的n-m个蛋糕可以现烤,请问小团能否满足他的要求?
在这里插入图片描述
输入描述:

输入包含多组数据,每组数据两行。
每组数据的第一行包含4个整数,n,m,a,b,空格隔开。这里不保证a和b的大小关系。
接下来一行m个数,空格隔开,代表烤好的蛋糕重量。
1≤n,m,a,b≤1000 , m≤n , 蛋糕重量不会超过1000

输出描述

对于每一组数据,如果可以办到顾客的要求,输出YES,否则输出NO

输入例子1:

4 2 2 4
3 3
4 2 2 4
1 1
4 2 2 4
5 5
4 2 4 2
2 4
2 2 2 4
3 3
3 2 2 4
3 3
3 2 2 4
3 3

输出例子1:

YES
NO
NO
YES
NO
NO
NO

主要思想:分类讨论

示例代码:

result_lis = []
while (True):
    try:
        n, m, a, b = map(int, input().split())
        temp_lis = [a, b]
        m_lis = list(map(int, input().split()))
        # ab均在做好之内
        if a in m_lis and b in m_lis:
            result_lis.append("YES")
        elif max(m_lis) > max(temp_lis) or min(m_lis) < min(temp_lis):
            result_lis.append("NO")
        # a在,b不在,至少有一个没做
        elif a in m_lis and b not in m_lis and n - m >= 1:
            result_lis.append("YES")
        # a不在,b在,至少有一个没做
        elif a not in m_lis and b in m_lis and n - m >= 1:
            result_lis.append("YES")
        # ab都不在,但是还有两个没做
        elif a not in m_lis and b not in m_lis and n - m >= 2:
            result_lis.append("YES")

        else:
            result_lis.append("NO")

    except Exception as e:
        break
for i in result_lis:
    print(i)

2. 晋级问题

小团是某综艺节目的策划,他为某个游戏环节设计了一种晋级规则,已知在这个游戏环节中每个人最后都会得到一个分数score_i,显而易见的是,游戏很有可能出现同分的情况,小团计划该环节晋级人数为x人,则将所有人的分数从高到低排序,所有分数大于等于第x个人的分数且得分不为0的人都可以晋级。

请你求出本环节的实际晋级人数。显然这个数字可能是0,如果所有人的得分都是0,则没有人满足晋级条件。

输入描述

输入第一行包含两个正整数n和x,分别表示参加本环节的人数,和小团指定的x。
输入第二行包含n个整数,每个整数表示一位选手的得分。

输出描述:

输出仅包含一个整数,表示实际晋级人数。

输入样例:

5 4 
0 0 2 3 4

输出样例:

3

示例代码:

result_lis = []
while True:
    try:
        n, x = map(int, input().split())
        n_lis = list(map(int, input().split()))
        # 从高到低排序
        n_lis.sort(reverse=True)
        y = n - 1
        # 取出第x人的分数
        score = n_lis[x - 1]
        flag = False
        # 循环遍历列表
        while y > 0:
            # 从右往左,从小到大,遇0则下标往左推
            if n_lis[y] == 0 or n_lis[y] < score:
                y -= 1
            else:
                # 下标不为0时,下表+1则为最终结果数
                result_lis.append(y + 1)
                flag = True
                break
        if not flag:
            result_lis.append(0)
    except Exception  as e:
        break

for _ in result_lis:
    print(_)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值