编程题练习@8-29

题目一:

题目描述
最近小强很喜欢玩一款勇士打怪的游戏,勇者和怪物都有一个属性:能力值。当勇者遭遇一个怪物时,战斗方式如下:
如果勇者的能力值不低于怪物的能力值,勇者胜。
否则勇者败。
勇者可以以任意顺序与怪物战斗,当勇者成功击败一只怪物后他可以获得一枚金币,初始时勇者全币数为0,任意时刻勇者手中的金币数不能为负。
勇者可以在任意时刻花费一枚金币,提升1点能力值。 现在小强想知道,勇者手中最多可以有多少金币,怪物可以不打完。

输入描述
第一行两个空格分隔的正整数 a a a n n n,分别代表勇者的初始能力值和怪物的数量。
接下来一行n个空格分隔的正整数 A i {A_i} Ai,用来描述第i只怪物的能力值。
输出描述
仅一行一个整数表示答案。

示例1
输入
1 3
2 2 1
输出
2

说明
击败能力值最低的怪物获得1金币,然后提高1能力值,然后击败剩下两只怪物,手中有2金币。

'''
贪心算法
'''
def max_coins(ability, monster_abilities):
    monster_abilities.sort()  # 对怪物的能力值进行排序
    coins = 0
    max_coins = 0

    for monster_ability in monster_abilities:
        if ability >= monster_ability: # 战胜怪兽
            coins += 1
            max_coins = max(max_coins, coins)
        else: # 使用钞能力也无法战胜怪兽
            if monster_ability > coins + ability:
                break
            else: # 临阵花钱提升自己
                coins -= monster_ability - ability
                coins += 1
                ability = monster_ability

    return max_coins

if __name__ == '__main__':
    ability , num_monsters = map(int, input().split())
    monster_abilities = list(map(int, input().split()))

    print(max_coins(ability, monster_abilities))
2

题目二:

题目描述
小红计划在 m m m天刷 n n n道题,第 i i i天计划刷 a i a_i ai题。小红会严格按照计划刷题,到第 i i i天时,小红会评估剩下平均每天需要刷 t t t题。若 a i a_i ai大于 t t t,则记录 > > >;若等于 t t t则记录 = = =;若小于 t t t,则记录 < < <
请你输出小红的评估记录。

输入描述
第一行输入两个正整数n和m。
接下来第二行输入m个非负整数 a i a_i ai
保证所有的 a i a_i ai的和等于n。
输出描述
输出为一行字符串,表示小红评估记录。

示例1
输入
15 6
4 5 0 3 1 2
输出
‘>><><=’

示例2
输入
12 4
3 2 5 2
输出
‘=<>=’

'''
模拟
'''
def solve(n, m, arr):
    resi = n
    ans = ''
    for idx, num in enumerate(arr):
        if num > resi / (m - idx):
            ans += '>'
        elif num < resi / (m - idx):
            ans += '<'
        else:
            ans += '='
        resi -= num
    return ans

if __name__ == '__main__':
    n, m = map(int, input().split())
    arr = list(map(int, input().split()))
    print(solve(n, m, arr))
>><><=

两道题只在用例上做了测试,如果有错误,欢迎交流!

猜你喜欢

转载自blog.csdn.net/cjw838982809/article/details/132569222