Python每日一练:硬币的面值奇偶排序陶陶摘苹果(花样解法)

news2025/4/28 3:51:09

Python每日一练


文章目录

  • Python每日一练
  • 前言
  • 一、硬币的面值
  • 二、奇偶排序
  • 三、陶陶摘苹果
  • 总结


前言

很显然,Python的受众远远大于C++,其实笔者本人对Python的理解也是远强于C++的,C++纯粹是为了假装笔者是个职业选手才随便玩玩的,借着十多年前学的C的功底,强行假装的。
因职业原因,Python更适用于运维、网络、AI方向,所以用得很多。最近假装职业码农装过头了,写点Python代码都习惯性加 ; 了,更离谱的是CSDN对笔者的能力判断中,C++一个劲地涨,Python都连能力都没了…
所以以后也要用Python来解解题,经常锻炼一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、硬币的面值

这题前些天用C++做过,正好拿Python来试试。

题目描述:
小A有n枚硬币,现在要买一样不超过m元的商品,他不想被找零,同时又不想带太多的硬币,且硬币可以重复,现在已知这n枚硬币的价值,请问最少需要多少硬币就能组合成所有可能的价格?

输入描述:
第一行两个数:n、m。 下一行,共n个数字,表示硬币的面值。

输出描述:
一行一个数,表示最少需要多少硬币。如果无解请输出“No answer!!!”

示例1
输入
5 31
1 2 8 4 16

输出
5

在这里插入图片描述

代码如下(示例):

class Solution:
    def __init__(self) -> None:
        pass
    
    def solution(self, n, m, arr):
        result = None
        # TODO: 请在此编写代码
        arr.sort()
        tmp = 0
        i = 0
        if arr[0] != 1:
            return "No answer!!!"
        result = 0 # 在某些解释器下可能需要,因为None不能与int运算
        while tmp < m and i <= n-1:
            if tmp+1 < arr[i+1]:
                tmp += arr[i]
                result += 1
            elif tmp+1 == arr[i+1]:
                tmp += arr[i+1]
                result += 1
                i += 1  # 可省,加了可以减少循环次数
            else:
                i += 1
            if i == n-1:
                result += (m-tmp)/arr[n-1] + bool((m-tmp)%arr[n-1])
                break;
        return int(result)

if __name__ == "__main__":
    
    arr_temp = [int(item) for item in input().strip().split()]
    n = int(arr_temp[0])
    m = int(arr_temp[1])
    arr = [int(item) for item in input().strip().split()]
    sol = Solution()
    result = sol.solution(n, m, arr)
    print(result)

首先,我们要理解题意,这题说简单点就是要求你带上一堆硬币,可以凑出1到m毛钱的任意组合。
所以我们先判断硬币中是不是有1毛的,没有就肯定不行。
然后就简单了,为了组成1-m的任意组合,我们来看个例子:
1+2+4,这三个硬币可以组成1到7毛的任意组合。所以我们取硬币的时候要取大于已取的总合1毛的硬币。这个情况下就要取一个8毛的硬币的了,如果有就取8毛,如果没有就再取一个4毛,以此类推。
下一个要取的硬币取决于手上已有硬币的总合,如此循环到最大面值的硬币,就不用再用循环来取了,直接用m-已取的总合除以最大面值,就得出了总数,这里可能存在不能整除的情况,所以加了一句bool((m-tmp)%arr[n-1])
用于判断是不是整除,不是就多加一个最大面值。bool值是0或1,正好可以用于相加。

逻辑和C++写的代码一样,这里因为做过省去了判断n数量的几行代码,主要是省了当硬币面值存在0的情况的判断。
逻辑其实是比较简单的,用算法思想来看,这属于动态规划法,看python的同鞋可能对算法都比较陌生,其实大可不必!就是一些解决问题的思想而已,如果有人看,以后出个专栏用python解释常用算法,笔者这方面也仅限于常见的算法能用,一些很高级的也玩不转。

二、奇偶排序

题目描述:
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。(测试用例仅做参考,我们会根据代码质量进行评分)

输入描述:
第一行输入整数n。(1<=n<=1000)表示数组大小 第二行输入n个整数a.(1<=n<=100)

输出描述:
输出重排之后的数组。

示例:
输入
6
3 34 67 89 90 58

输出
3 67 89 34 90 58

在这里插入图片描述

代码如下(示例):

class Solution:
    def __init__(self) -> None:
        pass
    
    def solution(self, n, arr):
        result = None
        # TODO: 请在此编写代码
        result = []
        tmp = []
        for i in arr:
            if i%2 != 0:
                result.append(str(i))   # 用str(i)是为了配合输出语句:print(" ".join(result))
            else:
                tmp.append(str(i))
        for i in tmp:
                result.append(i)
        return result

if __name__ == "__main__":

    n = int(input().strip())
    arr = [int(item) for item in input().strip().split()]
    sol = Solution()
    result = sol.solution(n, arr)
    print(" ".join(result))

这题非常简单,实在没啥好说的,这里在一次循环中判断是奇数还是偶数,为了不打乱偶数顺序,所以先放入tmp列表中。最后在奇数排完后,添加到result列表中,能略微减少循环。是用空间换时间的做法,在这个内存不值钱的年代,还是有点意义的。

三、陶陶摘苹果

题目描述:
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知 10 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

输入描述:
输入包括两行数据。第一行包含 10 个 100 到 200 之间(包括 100 和 200 )的整数(以厘米为单位)分别表示 10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 100 到 120 之间(包含 100 和 120 )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

输出描述:
输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

示例:
输入
100 200 150 140 129 134 167 198 200 111
110

输出
5

在这里插入图片描述

代码如下(示例):

class Solution:
    def __init__(self) -> None:
        pass
    
    def solution(self, heights, max_tourch_height):
    	# 不正经的lambda写法,map接收函数作为参数,将其映射于列表的各个元素,返回一个迭代器,list转换,sum求和
        result += sum(list(map(lambda x: bool(x<=max_tourch_height+30), heights)))
        # 另一个不正经的一行写法 ,直接列表生成bool值,用sum求和即可
        result += sum([(i<=max_tourch_height+30) for i in heights])   

        # TODO: 请在此编写代码
        # 以下是正经写法:
        for i in heights:
            if i<= max_tourch_height + 30:
                result += 1
                
        return result

if __name__ == "__main__":

    heights = [int(item) for item in input().strip().split()]
    max_tourch_height = int(input().strip())
    sol = Solution()
    result = sol.solution(heights, max_tourch_height)
    print(result) 

实在太简单了,可以用一个lambda函数一行解决,不过lambda不好理解,用列表生成式一行解决也可以,老实写三行更容易理解。三个解法取一个即可!注意注释掉另两种写法


总结

Python真香~

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

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

相关文章

【是C++,不是C艹】 缺省参数 | 函数重载 | 内联函数

&#x1f49e;&#x1f49e;欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《是C&#xff0c;不是C艹》&#x1f448; 前言&#xff1a; 上期&#xff0c;我带大家给C打了招呼&#xff0c;捎带着认识了命名空间和输入输出&#xff0c;那…

SPSS如何使用基础功能?

文章目录 0.引言1.菜单栏2.工具栏 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对软件界面基础功能进行阐述。    1.菜单栏 &am…

如何向面试官正确地提问?

你好&#xff0c;我是朱显杰。今天我们来聊一聊面试时&#xff0c;如何向面试官正确提问。 我做过8年面试官&#xff0c;面试过500多人。在面试的过程中&#xff0c;我发现了一个普遍现象&#xff0c;就是大部分候选人都不知道如何向面试官正确提问。要么不问&#xff0c;白白…

RocketMq源码分析(六)--消息消费者启动流程

文章目录 一、消息消费者模式二、消费者启动流程1、 push模式1&#xff09;类关系2&#xff09;类构造器3&#xff09;启动流程 2、pull模式1&#xff09;类关系2&#xff09;类构造器3&#xff09;启动流程 一、消息消费者模式 消息消费分两种模式&#xff1a;推&#xff08;p…

【Redis】Redis缓存双写一致性之更新策略

介绍 面试题 1、只要用到缓存&#xff0c;就可能会涉及到Redis缓存与数据库双存储双写&#xff0c;只要是双写&#xff0c;就一定会有数据一致性问题&#xff0c;怎么解决一致性问题&#xff1f; 2、双写一致性&#xff0c;先动缓存redis还是数据库mysql&#xff1f;为什么&a…

剪枝与重参第十课:RepVGG重参

目录 RepVGG重参前言1. RepVGG2. RepVGG网络搭建2.1 conv_bn2.2 RepVGG Block初始化2.3 forward2.4 branch的合并2.5 重参的实现2.6 整体网络结构搭建2.7 模型导出 3. 完整示例代码总结 RepVGG重参 前言 手写AI推出的全新模型剪枝与重参课程。记录下个人学习笔记&#xff0c;仅…

了解npm run指令

了解npm run指令 在package.json文件中的script字段&#xff0c;可以定义脚本命令&#xff0c;通过npm run指令运行该脚本。 比如简单定义一个输出打印的shell脚本。 {"script": {"hw": "echo hello world!"} }执行npm run hw可以看到终端上打…

Python---正则表达式与递归

1. 正则表达式&#xff1a; 是一种字符串验证的规则&#xff0c;通过特殊的字符串组合来确立规则 用规则去匹配字符串是否满足 如(^[\w-](\.[\w-])*[\w-](\.[\w-])$)可以表示为一个标准邮箱的格式 re模块的三个主要方法&#xff1a; re.match&#xff1a; re.match(匹配规…

电子电气架构——车辆E/E架构Software独立性

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人只有在举棋不定,无从把握的时候才感到疲惫。只有去行动就能获得解放,哪怕做的不好也比无所作为强! 本文主要介绍车辆E/E架构常识,主要涉及E/E架构车载…

Java 操作ElasticSearch

Java REST提供了两种风格的客户端连接工具&#xff0c;Java High Level REST Client、Java Low Level REST Client&#xff0c;这里我就不去细说Java Low Level REST Client了&#xff0c;因为这我确实没用到过&#xff0c;也不是很了解&#xff0c;我说一下Java High Level RE…

LVS 负载均衡群集的 NAT 模式和 DR 模式

文章目录 一、NAT 模式和 DR 模式的介绍DR模式NAT模式两种模式的区别 二、DR模式集群构建配置 一、NAT 模式和 DR 模式的介绍 DR模式 当用户向负载均衡调度器&#xff08;Director Server&#xff09;发起请求&#xff0c;调度器将请求发往至内核空间PREROUTING链首先会接收到…

【JavaEE】HTML基础知识

目录 1.HTML结构 2.HTML常见标签 3.表格标签 4.列表标签 5.表单标签 ​6.select 标签 7.textarea 标签 8.无语义标签: div & span 9.标签小练习 1.HTML结构 形如&#xff1a; <body idmyId>hello</body> HTML的书写格式 标签名 (body) 放到 <…

【操作系统OS】学习笔记:第二章 进程与线程 (上)【哈工大李治军老师】

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0c;…

58.网页设计规则#5_阴影

一些概念 ● 在一个100%平面设计的时代之后&#xff0c;我们现在又回到了在UI设计中使用阴影(“平面设计2.0”) ● 阴影箱深度(3D):阴影越多&#xff0c;离元素界面越远 利用好阴影 你不必使用阴影!只在对网站个性有意义的情况下使用它们 使用少量的阴影:不要给每个元素…

Jmeter接口自动化测试系列之Http接口自动化实战

以下主要介绍Jmeter接口自动化需要哪些控件、接口自动化实战及总结。 前面的系列文章&#xff0c;介绍了常用组件、参数化、接口依赖、断言等知识点&#xff0c;今天我们要将这些结合起来&#xff0c;进行综合实战。 2023年B站最新Jmeter接口测试实战教程&#xff0c;精通接口…

从一到无穷大 #5 公有云时序数据库定价

文章目录 引言serverless实例售卖结论 Azure CosmosDB预配吞吐量自动缩放吞吐量Serverless预留容量存储量 Amazon Timestream写入计费查询计费存储 阿里云TSDB阿里云Lindom时序引擎实例固定费用存储费用节点费用 华为云GaussDB(for Influx)腾讯云CTSDBTDengineInfluxDB CloudAW…

c++11下篇 + 智能指针

c11下篇 智能指针 1 可变参数模板1.1 递归函数方式展开参数包1.2 逗号表达式展开参数包1.3 STL容器中的empalce相关接口函数&#xff1a; 2 lambda达式2.1 c的痛2.2 lambda表达式语法2.3 函数对象与lambda表达式 3 包装器3.1 bind 4 线程库4.1 thread类的简单介绍4.2 面试题&a…

MySQL示例数据库(MySQL Sample Databases) 之 world_x数据库

文章目录 MySQL示例数据库(MySQL Sample Databases) 之 world_x数据库官方示例数据介绍world_x数据库world_x数据库安装world-db/world.sql的脚本内容参考 MySQL示例数据库(MySQL Sample Databases) 之 world_x数据库 官方示例数据介绍 MySQL 官方提供了多个示例数据库&#…

差分数组 技巧小记

差分数组 差分数组二维差分 差分数组 如果两个信息“长得很像”&#xff0c;只要保留一个&#xff0c;对另一个&#xff0c;只要保留它们的差异&#xff0c;然后进行微调就行了。 差分数组&#xff1a; 3210&#xff0c;3208&#xff0c;3206&#xff0c;3211&#xff0c;32…

Three.js--》Gui.js库的使用讲解

目录 Gui.js库基本使用 使用three自带gui库实现基本操作 gui库实现下拉菜单和单选框 gui库分组方法实现 使用dat.gui第三方库 Gui.js库基本使用 gui.js说白了就是一个前端js库&#xff0c;对HTML、CSS和JavaScript进行了封装&#xff0c;学习开发3d技术时借助该库可以快速…