华为机试题:HJ16 购物单(python)

news2024/9/21 0:43:52

文章目录

  • 知识点详解
    • 1、input():获取控制台(任意形式)的输入。输出均为字符串类型。
    • 2、print() :打印输出。
    • 3、strip():删除字符串(开头 / 结尾)指定字符(默认空格)或字符序列,但不能删除中间部分的字符。
    • 4、split():通过指定分隔符(默认为空格)对字符串进行切片,并返回分割后的字符串列表(list)。
    • 5、int() :将一个字符串或数字转换为十进制整数(强转)。输入可以指定进制,默认十进制。
    • 6、map():根据给定函数对指定序列进行映射。即把传入函数依次作用到序列的每一个元素,并返回新的序列。
    • 7、list():创建列表。将任意可迭代序列转换为列表类型,并返回转换后的列表。
    • 8、range() :输出指定范围内的所有值(前闭后开)。
    • 9、list.append() :向列表末尾添加任意类型元素。
    • 10、len():返回字符串、列表、字典、元组等的长度。
    • 11、max() :返回序列中的最大值。

描述

在这里插入图片描述

输入描述

在这里插入图片描述

输出描述: 输出一个正整数,让张强获得最大满意度。

示例1

输入:
1000 5
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0
输出:
2200

示例2

输入:
50 5
20 3 5
20 3 5
10 3 0
10 2 0
10 1 0
输出:
130
说明:
在这里插入图片描述

Python3

import collections
import functools
n,m = map(int,input().strip().split())
v = [0]*m
p = [0]*m
q = [0]*m
d = collections.defaultdict(list)
for i in range(m):
    temm = list(map(int,input().strip().split()))
    v[i], p[i],q[i] = temm[0],temm[1],temm[2]-1
    if q[i] != -1:
        d[q[i]].append(i)

dn = collections.defaultdict(list)
for k in d.keys():
    dn[k].append([v[k],v[k]*p[k]])
    for i in d[k]:
        dn[k].append([v[i]+v[k],v[i]*p[i]+v[k]*p[k]])
    if len(d[k]) == 2:
        dn[k].append([v[d[k][0]]+v[k]+v[d[k][1]],v[d[k][0]]*p[d[k][0]]+v[k]*p[k]+v[d[k][1]]*p[d[k][1]]])

for i in range(m):
    if i not in d and q[i] == -1:
        dn[i].append([v[i],v[i]*p[i]])

k = list(dn.keys())
@functools.cache
def f(i,j):
    if j < 0: return 0
    if i < 0: return 0
    
    res=f(i-1,j)
    for v,vp in dn[k[i]]:
        if v>j:continue
        res = max(res,f(i-1,j-v)+vp)
    return res
     

print(f(len(k)-1,n))
       
  • input():获取控制台(任意形式)的输入。输出均为字符串类型。
  • strip():删除字符串(开头 / 结尾)指定字符(默认空格)或字符序列,但不能删除中间部分的字符。
  • split():通过指定分隔符(默认为空格)对字符串进行切片,并返回分割后的字符串列表(list)。
  • int() :将一个字符串或数字转换为十进制整数(强转)。输入可以指定进制,默认十进制。
  • map():根据给定函数对指定序列进行映射。即把传入函数依次作用到序列的每一个元素,并返回新的序列。
  • list():创建列表。将任意可迭代序列转换为列表类型,并返回转换后的列表。
  • range() :输出指定范围内的所有值(前闭后开)。
  • list.append() :向列表末尾添加任意类型元素。
  • len():返回字符串、列表、字典、元组等的长度。
  • max() :返回序列中的最大值。
  • print() :打印输出。

知识点详解

1、input():获取控制台(任意形式)的输入。输出均为字符串类型。

【Python】input()函数用法小结

备注:输入可以是任意形式,不限制数据类型。
备注:无论输入是什么,输出都是字符串类型。

print('整型: ', input())
##########################
str1 = input()
print('任意形式: ', str1)
print(type(str1))
'''
123
整型:  123
asd123!@#
任意形式:  asd123!@#
<class 'str'>
'''

2、print() :打印输出。

【Python】print()函数的用法

3、strip():删除字符串(开头 / 结尾)指定字符(默认空格)或字符序列,但不能删除中间部分的字符。

函数说明:str3 = str1.strip(str2)
其中,str1是操作字符串,str2是待移除指定的字符或字符序列。str3是移除后生成的新字符串。

str_temp1 = "  123 ABCDEFG 321"
str_temp2 = "  123 ABCDEFG 321"
str_temp3 = "  123 ABCDEFG 321"
print(str_temp1.strip())            # 【输出结果】"123 ABCDEFG 321"
print(str_temp2.strip('12'))        # 【输出结果】"  123 ABCDEFG 321  "
print(str_temp3.strip('3'))         # 【输出结果】"  123 ABCDEFG 321  "

4、split():通过指定分隔符(默认为空格)对字符串进行切片,并返回分割后的字符串列表(list)。

函数说明:str.split(str=".", num=string.count(str))[n]
参数说明:

  • str: 表示分隔符,默认为空格,但是不能为空。若字符串中没有分隔符,则把整个字符串作为列表的一个元素。
  • num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量。
  • [n]: 表示选取第n个切片。
    • 注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略。
s = 'www.dod.com.cn'
print('分隔符(默认): ', s.split())                    # 【输出结果】分隔符(默认):  ['www.dod.com.cn']
print('分隔符(.): ', s.split('.'))                   # 【输出结果】分隔符(.):  ['www', 'dod', 'com', 'cn']
print('分割1次, 分隔符(.): ', s.split('.', 1))        # 【输出结果】分割1次, 分隔符(.):  ['www', 'dod.com.cn']
print('分割2次, 分隔符(.): ', s.split('.', 2))        # 【输出结果】分割2次, 分隔符(.):  ['www', 'dod', 'com.cn']
print('分割2次, 分隔符(.), 取出分割后下标为1的字符串: ', s.split('.', 2)[1])      # 【输出结果】分割2次, 分隔符(.), 取出分割后下标为1的字符串:  dod
print(s.split('.', -1))                             # 【输出结果】['www', 'dod', 'com', 'cn']
###########################################
# 分割2次, 并分别保存到三个变量
s1, s2, s3 = s.split('.', 2)
print('s1:', s1)                                    # 【输出结果】s1: www
print('s2:', s1)                                    # 【输出结果】s2: www
print('s3:', s2)                                    # 【输出结果】s3: dod
###########################################
# 连续多次分割
a = 'Hello<[www.dodo.com.cn]>Bye'
print(a.split('['))                                 # 【输出结果】['Hello<', 'www.dodo.com.cn]>Bye']
print(a.split('[')[1].split(']')[0])                # 【输出结果】www.dodo.com.cn
print(a.split('[')[1].split(']')[0].split('.'))     # 【输出结果】['www', 'dodo', 'com', 'cn']

5、int() :将一个字符串或数字转换为十进制整数(强转)。输入可以指定进制,默认十进制。

【Python】int()用法详解

函数说明:int(x, base=10)
输入参数:

  • x:字符串或数字。
  • base:参数x为(二进制、八进制、十进制、十六进制)数,默认十进制数
    备注:若带参数base,则输入必须是整数,且整数必须以字符串的形式进行输入。如:整数12转化为16进制,int('12', base=16)
    10进制转化为16进制的算法在这里插入图片描述
输入返回值
int()整数 0
int(整数)整数
int(浮点数)浮点数的整数
int(字符串(整数))将字符串类型转换为int类型转换
int(字符串(浮点数))需先转换为float类型,再进行int转换,否则报错。
int('整数', base=16)将输入的16进制整数转换为10进制整数(同理:其余进制)
print(int())                    # 【输出结果】0
print(int(2))                   # 【输出结果】2
print(int(-2.9))                # 【输出结果】-2
print(int('-2'))                # 【输出结果】-2
print(int(float('-2.9')))       # 【输出结果】-2

print(int('20', 16))       		# 【输出结果】32
print(int('0XAA', 16))       	# 【输出结果】170

6、map():根据给定函数对指定序列进行映射。即把传入函数依次作用到序列的每一个元素,并返回新的序列。

函数说明:map(function, iterable)
输入参数:

  • function:自定义函数。
  • iterable:可迭代序列
print('将元组转换为list(返回一个迭代器): ', map(int, (1, 2, 3)))
print('将元组转换为list(使用list()转换为列表): ', list(map(int, (1, 2, 3))))

print('将字符串转换为list: ', list(map(int, '1234')))
print('将字典中的key转换为list: ', list(map(int, {1: 2, 2: 3, 3: 4})))

'''
将元组转换为list(返回一个迭代器):  <map object at 0x0000018507A34130>
将元组转换为list(使用list()转换为列表):  [1, 2, 3]

将字符串转换为list:  [1, 2, 3, 4]
将字典中的key转换为list:  [1, 2, 3]
'''

7、list():创建列表。将任意可迭代序列转换为列表类型,并返回转换后的列表。

函数说明:list(object)

  • object:待转换为列表的任意可迭代序列(可省略)。若参数为空:list() 表示创建一个空列表。

备注1:参数必须是可迭代序列对象,否则系统报错。
备注2:将字典转换为列表时,默认只输出key,即默认形式:dict.keys(),而舍去value。若想将字典的值转换为列表,可以使用dict.values()

# (1)创建一个空列表
test1 = list()
print(test1)                            # 【输出结果】[]
#################################################################
# (2)【字符串】转换为列表
test2 = list('cat')
print(test2)                            # 【输出结果】['c', 'a', 't']
#################################################################
# (3)【元组】转换为列表
test3 = list(('I love Python.', 'I also love HTML.'))
print(test3)                            # 【输出结果】['I love Python.', 'I also love HTML.']
#################################################################
# (4)【字典】转换为列表
test4 = list({'China': 'Beijing', 'Russia': 'Moscow'})
test44 = list({'China': 'Beijing', 'Russia': 'Moscow'}.keys())      
test444 = list({'China': 'Beijing', 'Russia': 'Moscow'}.values())
print(test4)                            # 【输出结果】['China', 'Russia']
print(test44)                           # 【输出结果】['China', 'Russia']
print(test444)                          # 【输出结果】['Beijing', 'Moscow']
#################################################################
# (5)【集合】转换为列表
test5 = list({1, 4, 'sdf'})
print(test5)                            # 【输出结果】[1, 4, 'sdf']
#################################################################
# (6)【列表】转换为列表
test6 = list(["a", "b", "c", "d"])
print(test6)                            # 【输出结果】['a', 'b', 'c', 'd']
#################################################################
# (7)【可迭代序列(range类型)】转换为列表
test7 = list(range(10))
print(test7)                            # 【输出结果】[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#################################################################
# (8)【可迭代序列(map类型)】转换为列表
test8 = list(map(int, [23.2, 33.1]))
print(test8)                            # 【输出结果】[23, 33]

8、range() :输出指定范围内的所有值(前闭后开)。

函数说明:range(start=0,stop,step=1)
输入参数:

  • start:序列的起始点,默认值0。
  • stop:序列的终止点。
  • step:滑动步长,默认为1。正数表示迭代上升,负数表示迭代下降。

备注:前闭后开[A,B),即可以取到A值,但取不到B值。

# (1)指定stop=9, start默认为0,step默认为1
for i in range(9):
    print('A =', i)
'''
A = 0
A = 1
A = 2
A = 3
A = 4
A = 5
A = 6
A = 7
A = 8
'''
# (2)指定start=2, stop=9, step默认为1
for i in range(2, 9):
    print('B =', i)
'''
B = 2
B = 3
B = 4
B = 5
B = 6
B = 7
B = 8
'''
# (3)指定start=2, stop=9, step=-2
for i in range(9, 2, -2):
    print('C =', i)
'''
C = 9
C = 7
C = 5
C = 3
'''

9、list.append() :向列表末尾添加任意类型元素。

函数说明:list.append( element )
输入参数:

  • element :任何类型的元素。

注意1:只能向列表末尾添加元素,而不是任意位置。
注意2:将列表A添加到列表B,添加的是 “引用地址” 而不是内容本身,故当被列表A发生变化时,添加后的列表B也会同步发生变化。 解决方法:深拷贝copy.deepcopy(list(A))后进行添加。

import copy:导入模块
浅拷贝copy.copy(list(A)):拷贝这个对象的引用地址
深拷贝copy.deepcopy(list(A)):拷贝对象的内容。

# (1)添加任意类型元素
list1 = ['A', 'B', 2]
list1 .append({'key': 1})
print(list1)
############################################################
# (2)列表同步:若添加的列表A发生改变,被添加的列表B同步改变。
list2 = ['A', 'B', 2]
list22 = [1, 3]
list2.append(list22)
print(list2)
list22.append('Z')
print(list2)
############################################################
# (2)深拷贝:若添加的列表A发生改变,被添加的列表B不会改变。
import copy
list3 = ['A', 'B', 2]
list33 = [1, 3]
list3.append(copy.deepcopy(list33))
print(list3)
list33.append('Z')
print(list3)

'''
['A', 'B', 2, {'key': 1}]
['A', 'B', 2, [1, 3]]
['A', 'B', 2, [1, 3, 'Z']]
['A', 'B', 2, [1, 3]]
['A', 'B', 2, [1, 3]]
'''

10、len():返回字符串、列表、字典、元组等的长度。

函数说明:len(object)

str_temp = "Hello, boy !"
print(len(str_temp))                    # 【输出结果】12
#############################################
list_temp = ['h', 'e', 'l', 'l', 'o']
print(len(list_temp))                   # 【输出结果】5
#############################################
dict_temp = {'num': 520, 'name': "do do"}
print(len(dict_temp))                   # 【输出结果】2
#############################################
tuple_temp = ('G', 'o', 'o', 'd')
print(len(tuple_temp))                  # 【输出结果】4

11、max() :返回序列中的最大值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

两小时上手ActiveMQ

一、消息中间件概述 1.1 消息中间件产生的背景 在客户端与服务器进行通讯时.客户端调用后&#xff0c;必须等待服务对象完成处理返回结果才能继续执行。 客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都都必须正常运行;如果由于服务对象崩溃或者网络故障导致用…

ceres学习笔记(四)

前言&#xff1a; 学习了pose_graph_2d部分&#xff0c;因为先学习了3维的pose_graph_3d部分&#xff0c;所以这个就比较容易。简单来说就是se2和se3的区别。整个的运行逻辑和3维部分的pose_graph_3d部分是一样的&#xff0c;概括为&#xff1a; 1.设置好两个type&#xff0c…

7、CenOS6安装Nginx

Nginx的安装与启动 什么是Nginx Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。由俄罗斯的程序设计师伊戈尔西索夫&#xff08;Igor Sysoev&#xff09;所开发&#xff0c;官方测试 nginx 能够支支撑 5 万并发链接…

《早安隆回》的铁粉,深圳80后男子不计成本,收购袁树雄签名照

谁也没有想到&#xff0c;五十多岁并且离异多年的袁树雄&#xff0c;靠着一首《早安隆回》&#xff0c;一夜之间红遍大江南北。如今《早安隆回》这首歌曲&#xff0c;已经拥有了三百万流量&#xff0c;有人说袁树雄下辈子都吃喝不愁&#xff0c;他的前妻该后悔了。 《早安隆回》…

ue4c++日记4(控制pawn类的运动|创建游戏模式|)

目录 代码速查 调用数学公式 获取位置/设置位置 绑定玩家输入按键&#xff0c;UE4传值给函数进行处理 约束获得的值再输出 创建对象 对象绑定到xxx上 设定默认玩家 实例&#xff1a;sin函数实现往复运动 实例&#xff1a;删除c类 1.删掉cpp和.h文件 2.删编译好的文件B…

缓存Caffeine之W-TinyLFU淘汰测录

我们常见的缓存是基于内存的缓存&#xff0c;但是单机的内存是有限的&#xff0c;不能让缓存数据撑爆内存&#xff0c;所有需要缓存淘汰机制。https://mp.csdn.net/editor/html/115872837 中大概说明了LRU的缓存淘汰机制&#xff0c;以及基于LRU的著名实现guava cache。除了LRU…

Python学习笔记——类(面向对象)

Python中使用类&#xff08;class〕来实现面向对象编程。Python中的类, 具有面向对象编程的所有基本特征&#xff1a;允许多继承、派生类可以重写它父类的任何方法、方法可以调用父类中同名的方法, 对象可以包含任意数量和类型的数据成员。创建类Python中, 使用class语句来创建…

Python 第7章 文件与数据格式化 笔记1

编码&#xff1a;print(云.encode(utf8))print(b\xe4\xba\x91.decode(utf8))要注意代码的编码方式。7.1文件概述windows中一个文件的完标识&#xff1a;D:\Downloads\新建文本文档.txt依次是路径&#xff0c;文件名主干&#xff0c;拓展名。没有包含除了文本字符以外的其他数据…

【JavaEE初阶】第四节.多线程基础篇 Thread类的使用、线程的几个重要操作和状态

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、Thread类的常见构造方法 二、Thread 的几个常见属性 三、和线程相关的几个重要的操作 3.1 启动线程 - start() 3.2 中断线程 3.3 等待线程 - join() …

JDK 8新特性之基本发展史

目录 一&#xff1a;Java SE的发展历史 二&#xff1a;Open JDK来源 三&#xff1a;Open JDK 和 Oracle JDK的关系 四&#xff1a;Open JDK 官网介绍 小结 &#xff1a; 一&#xff1a;Java SE的发展历史 Sun公司在1991年成立了一个称为绿色计划( Green Project )的项目&a…

Ubuntu22.04 美化

一&#xff1a;安装软件 sudo apt install gnome-tweaks chrome-gnome-shell sudo apt install gtk2-engines-murrine gtk2-engines-pixbuf sudo apt install sassc optipng inkscape libcanberra-gtk-module libglib2.0-dev libxml2-utils 二&#xff1a;安装GNOME扩展插件…

Windows 卸载 Visual Studio Code、MinGW-w64、CMake

文章目录1.卸载 Visual Studio Code1.1 在控制面板中找到 Visual Studio Code 将其卸载1.2 删除之前安装过的插件1.3 删除用户信息和缓存信息2.卸载 MinGW-w642.1 删除之前解压出来的文件夹2.2 删除之前配置过的环境变量3.卸载 CMake3.1 删除之前解压出来的文件夹3.2 删除之前配…

无 Hadoop 环境部署 Kylin4

1相比于 Kylin 3.x&#xff0c;Kylin 4.0 实现了全新 spark 构建引擎和 parquet 存储&#xff0c;使 kylin 不依赖 hadoop 环境部署成为可能。无Hadoop环境也降低了运维成本&#xff0c;减少了系统资源占用。 以下操作基于centos7.6 单机版本 部署版本信息如下 JDK 1.8Hive …

【Javascript】面向对象编程,this,原型与原型链,类与实例,class,实现Map,stack,Queue ,Set

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录对象中的方法/thisthis使用bind函数原型原型链类与实例classclass语法补充Map实现Map实现stack实…

【国产GD32芯片解析中科微北斗+GPS模块经纬度数据详细教程-附完整代码工程】

国产GD32芯片解析中科微北斗GPS模块经纬度数据详细教程-附完整代码工程简介准备工作PC端需要用到的工具代码下载地址GD32F103C8T6最小系统板代码实现GD32串口引脚定义如下&#xff1a;串口的初始化串口0初始化代码&#xff1a;串口1初始化代码串口的输入串口0的输入代码如下&am…

非标准包 game.rgss3a 的打开方法 | 2023 年实测

写在前面&#xff1a;最近在玩 RPG 游戏&#xff0c;想拆一个 Game.rgss3a 包&#xff0c;在网上找了很久的拆包方法&#xff0c;感觉写的比较凌乱&#xff0c;我来给大家整理一下吧。不过我本人的技术能力也很差&#xff0c;不确定说的是不是对的&#xff0c;就当是给大家提供…

中国智造助推跨境电商企业迈向全球市场

现今&#xff0c;跨境电商行业发展的如火如荼&#xff0c;中国智造也在不断助推跨境电商企业迈向全球市场。业内人员在新常态下的思想也有了一些改变&#xff0c;现在的跨境电商都是“平台物流”&#xff0c;在物流环节&#xff0c;也需要我们的专业团队去进行整合&#xff0c;…

GD32F450寄存器和库函数

GD32F4xx用户手册 GD32F450xx数据手册 GD32F3x0固件库使用指南 一、寄存器介绍 1. 存储器映射表 GD32是一个32位的单片机&#xff0c;它的地址范围为2的32次方&#xff0c;也就是4GB的地址空间。 为了降低不同客户在相同应用时的软件复杂度&#xff0c;存储映射是按Corte…

python能做的100件事03-python爬虫

文章目录1. scrapy介绍2 新建爬虫项目3 新建蜘蛛文件4 运行爬虫5 爬取内容5.1分析网页结构5.2 关于Xpath解析5.3 接着解析电影数据5.4 下载缩略图5.5 完整代码6 最后说明本例基于python3和scrapy爬虫框架&#xff0c;不再介绍python的基础知识和爬虫的基本知识。1. scrapy介绍 …

制药企业的发展趋势--行业公司数据调研

制药行业是国家重点培育发展的战略产业。制药行业的发展对人民健康、医药科技和社会进步等方面都有着十分重要的作用。下面笔者将阐述近年来制药行业发展的现状及趋势&#xff0c;并对制药行业的研发、销售等多维度的信息进行展示与解读。中国制药企业现状目前&#xff0c;中国…