秋招笔试常考题目

持续更新中……

秋招笔试常考题目:分数背包,元素组合,版本比较,列表内所有元数个数,找零问题

目录

分数背包

实现组合

版本比较

对列表内所有元素实现计数

找零问题


分数背包

from re import M


def fractional_backpack(goods, w_bag):
    """分数背包:根据每种货物的单价判断先装哪个
       返回的是每种商品能放的数量,整数或分数
    Args:
        goods (_type_): _description_
        weight (_type_): _description_
    """
    m = [0 for _ in range(len(goods))]
    for i, (price, weight) in enumerate(goods):
        if w_bag >= weight:
            m[i] = weight
            w_bag -= weight
        else:
            m[i] = w_bag / weight
            w_bag = 0
            break
    return m

if __name__ == "__main__":
    goods = [(60, 10), (100, 20), (120,30)]
    goods.sort(key=lambda x: x[0]/x[1], reverse = True)
    print(fractional_backpack(goods, 50))

实现组合

from abc import ABC
import itertools

hashm = {"A" : ["A1","A2","A3"], "B" : ["B1","B2","B3"], "C" : ["C1","C2","C3"]}
a = input()
m = []
for i in a:
    m.append(hashm[i])
print(m)
res = ["".join(j) for j in itertools.product(*m)]
print("res = ", res)
for x in res:
    print(x, end = " ")

版本比较

def version_compare(v1, v2):
    """版本比较大小"""
    vvv1 = v1.split(".")
    vvv2 = v2.split(".")
    print("vvv1: ",vvv1)
    print("vvv2: ",vvv2)
    c = 0
    while True:
        if len(vvv1) == c and len(vvv2) == c:
            return 0
        if len(vvv1) == c:
            vvv1.append(0)
            print(vvv1)
        if len(vvv2) == c:
            vvv2.append(0)
            print(vvv2)
        if int(vvv1[c]) > int(vvv2[c]):
            return 1
        elif int(vvv1[c]) < int(vvv2[c]):
            return -1
        c += 1
    
if __name__ == "__main__":
    v1, v2 = input().split(",")
    print(version_compare(v1, v2))

对列表内所有元素实现计数

import random
from collections import Counter

def count_number(nums):
    """计算列表中每个元素的个数"""
    # cou_num = nums.count(4)
    # print(cou_num)
    
    # 方法1: 两个列表对应实现
    # nums_set = list(set(nums))
    # print("列表的不重复元素为:",nums_set)
    # len_nums_set = len(nums_set)
    # cou = [0 for _ in range(len_nums_set)]
    # for i in range(len_nums_set):
    #     cou[i] = nums.count(nums_set[i])
    
    # 方法2: 引用库,直接一行代码实现
    cou = Counter(nums)  
    print(cou[5])      
    return cou

if __name__ == "__main__":
    nums = [random.randint(1,5) for _ in range(10)]
    print(nums)
    print(count_number(nums))

找零问题

def charge(spend, pay):
    """
    规定面额的找零,每种金额应找张数
    Args:
        spend (_type_): 购买商品的花销
        pay (_type_):   支付的金额(待找零)
    """
    miane = [100, 50, 20, 5, 1]
    charge = [0 for _ in range(len(miane))]
    print(charge)
    all = pay - spend
    # i = 0
    # while i < len(miane):
    #     charge[i] = all // miane[i]
    #     all = all % miane[i]
    #     i += 1
    for i, money in enumerate(miane):
        charge[i] = all // money
        all = all % money
    return charge
        
    
if __name__ == "__main__":
    print(charge(153, 200))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值