分数约分-第11届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第20讲。

分数约分,本题是2020年1月12日举办的第11届蓝桥杯青少组Python编程选拔赛真题,题目要求编写程序对给定的分数进行约分。

先来看看题目的要求吧。

一.题目说明

编程实现:

约分是把分数化成最简分数的过程,约分后分数的值不变,且分子分母的最大公约数为1,若最终结果的分母为1,则直接用整数表示。

提示:

两个以逗号分隔输入的整数,可以采用如下方法进行转换、分离:

str = input()

nums = eval(str)

输入描述:

输入两个正整数(以逗号分隔)分别作为分数的分子和分母。

输出描述:

第一行显示输入的分数;

第二行显示约分后的最简分数 ,若分母为1,直接用整数表示。

样例输入1:

27,30

样例输出1:

27/30

9/10

样例输入2:

36,6

样例输出2:

36/6

6

评判标准:

下列各评分项单独计分,得分累加,共25个计分点。

  • 6分:能接收输入的信息,在第一行正确显示输入的分数,格式符合样例;

  • 9分:至少针对一个输入,能输出正确的最简分数,输出格式符合样例;

  • 10分:针对裁判指定所有样例的输入,都能输出正确的最简分数,旦输出格式符合样例。

二.思路分析

这是一道和数学相关的算法题,考查的知识点包括循环和数学运算。

题目要求对两个整数构成的分数进行约分,那什么是约分呢,约分的依据又是什么呢?

图片

把分数简化成最简分数的过程就叫约分,例如27 / 30这是一个分数,27可以写成3 * 9,30可以写成3 * 10,那么27 / 30可以写成 9/ 10,这里的公因子3被同时约掉了。

把一个分数的分子、分母同时除以公约数,分数的值保持不变。

约分时,如果能很快找到分子和分母的最大公约数,直接用它们的最大公约数去除就可以了。

所以,本题的重点是如何计算两个整数的最大公约数,英文是Greatest Common Divisor,简称GCD。

图片

求解最大公约数是编程学科中的典型问题,方法也比较多,常见的解法有如下4种:

  • 枚举算法

  • 欧几里得算法

  • 更相减损法

  • Stein算法

其中,枚举算法是最简单的,其基本思路可以分为如下3个步骤:

1). 找到两个数字中的较小者,从而确定循环范围,假设为从n到1;

2). 从n开始,判断两个数字是否能被n整除,如果是,则n就是最大公约数,结束循环,否则转到3);

3). 将n减1,重复步骤2)。

其流程图如下所示:

图片

为了方便,我们可以将计算最大公约数的过程定义成函数,调用该函数时,传入两个整数,返回它们的最大公约数。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分两步来编写程序:

  • 定义函数计算最大公约数

  • 对分数进行约分

1. 定义函数计算最大公约数

根据前面的分析,定义函数如下:

图片

代码不多,强调4点:

1). 交换两个变量,在Python编程中不需要使用临时变量,直接使用x,y = y,y即可,这是Python独有的特性,非常方便;

2). 在循环的时候,需要从x到1,因此range()函数的参数,必须要写上-1;

3). 函数中的return语句有两个作用,一是返回值,二是结束函数; 

4). 任何两个整数的最小公约数是1。

2. 对分数进行约分

有了函数,接下来就简单了,先获取输入的a和b,然后调用函数计算出最大公约数,接着将a和b都除以最大公约数,就可以得到约分后的结果了。

不过,分母有可能出现1的情况,此时需要额外判断一下,具体代码如下:

图片

上面的代码不难理解,需要说明的是获取a和b的值时,用到了列表推导式和多变量赋值的编程技巧。

在Python中,多变量赋值的基本写法如下:

a = 1b = 2c = 3

当然,我们也可以直接用一行代码来简化,如下:

a, b, c = 1, 2, 3

实际上,还有一种特殊的赋值方式,如下:

a, b, c = [1, 2, 3]

当一个集合类型(包括列表、元组和集合)赋值给多个变量的时候,多个变量是依次获取指定下标位置的值。

运行程序,输入27,30,效果如下:

图片

输入36,6效果如下:

图片

至此,整个程序就全部完成了,你也可以输入不同的数字来测试效果。

四.总结与思考

本题的分数为25分,代码在15行左右,涉及到的知识点包括:

  • 循环语句,主要for...in循环;

  • 条件语句;

  • 输入和输出处理;

  • 运算符,重点是%、//和and等;

  • 函数的定义及使用;

题目难度中等,难点有两个,一是从题目的描述中分析出最大公约数这个关键点,二是如何计算两个整数的最大公约数。

超平老师给你留一道思考题,除了上面讲到的枚举算法外,还有3种更高效的方法,你知道是怎么实现的么,超平老师后续还会专门进行分析讲解的。

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要源码的,可以移步至“超平的编程课”gzh。

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

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

相关文章

LeetCode:967连续查相同的数字(DFS)

题目 返回所有长度为 n 且满足其每两个连续位上的数字之间的差的绝对值为 k 的 非负整数 。 请注意,除了 数字 0 本身之外,答案中的每个数字都 不能 有前导零。例如,01 有一个前导零,所以是无效的;但 0 是有效的。 …

Google Gemini Pro:AI模型的新里程碑,开放API访问;Octo: 一个开源通用的机器人策略

🦉 AI新闻 🚀 Google Gemini Pro:AI模型的新里程碑,开放API访问 摘要:Google宣布推出了名为Gemini的AI模型,旨在使AI更加有用。Gemini分为Ultra、Pro和Nano三个版本,并已开始在产品中使用。Ge…

openEuler社区与9大海外开源基金会深入合作,构建全球开源新生态

数字经济高速发展下,国产操作系统开源生态建设近年来取得里程碑式的重要进展。其中以openEuler为代表的开源系统正走向国际,在全球化方面取得实质性突破。 12月15日,以“崛起数字时代,引领数智未来”为主题的操作系统大会2023在北…

阿赵的虚幻引擎(UE)学习笔记

大家好,我是阿赵。   作为国内最早一批的Unity引擎使用者,Unity引擎我已经用了15年了。不过自从上次的Unity收费风波之后,估计很多Unity的使用者都有种危机感,假如有一天,Unity真的被游戏厂商所抛弃之后,…

TCP/IP详解——HTTPS 协议

文章目录 1. HTTPS 协议1.1 HTTPS 原理1.2 HTTPS 过程1.3 从数据包角度看 HTTPS 交互过程1.4 常见的 HTTPS 数据包解码1.4.1 ClientHello 数据包1.4.2 ServerHello 数据包 1.5 思考 1. HTTPS 协议 1.1 HTTPS 原理 HTTPS概念 HTTPS 是以安全为目标的HTTP通道,并不…

Python到机器学习再到深度学习:一条完整的人工智能学习之路

Python到机器学习再到深度学习:一条完整的人工智能学习之路 引言第一部分:Python基础第二部分:机器学习基础第三部分:深入深度学习 引言 简短介绍Python在数据科学和机器学习领域的重要性。概述本文的目标:提供一个清…

【MCAL】AUTOSAR架构下TC3xx平台的MCAL时钟系统配置实践

目录 前言 正文 1. MCU模块介绍 2. MCAL上的时钟Clock配置 2.1 AUTOSAR标准关于时钟的描述

Node.js 工作线程与子进程:应该使用哪一个

Node.js 工作线程与子进程:应该使用哪一个 并行处理在计算密集型应用程序中起着至关重要的作用。例如,考虑一个确定给定数字是否为素数的应用程序。如果我们熟悉素数,我们就会知道必须从 1 遍历到该数的平方根才能确定它是否是素数&#xff…

RabbitMq基本使用

目录 SpringAMQP1.准备Demo工程2.快速入门1.1.消息发送1.2.消息接收1.3.测试 3.WorkQueues模型3.1.消息发送3.2.消息接收3.3.测试3.4.能者多劳3.5.总结 SpringAMQP 将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于R…

Ubuntu安装蓝牙模块pybluez以及问题解决方案【完美解决】

文章目录 简介问题及解决办法总结 简介 近期因工程需要在Ubuntu中使用蓝牙远程一些设备。安装Bluetooth的Python第三方软件包pybluez时遇到很多问题,一番折腾后完美解决。此篇博客进行了梳理和总结,供大家参考。 问题及解决办法 pip install pybluez安…

Kotlin 协程库v1.7.1的核心模块(kotlinx-coroutines-core)-- kotlinx.coroutines篇

asContextElement&#xff1a; 创建一个协程上下文元素(CoroutineContext.Element)&#xff0c;该元素可以被添加到协程上下文中&#xff0c;以便在特定的协程中检索和使用 注意&#xff1a;上下文元素不跟踪线程局部变量的修改 示例 val myThreadLocal ThreadLocal<Str…

大规模数据可视化(纯文字干货科普)

导读&#xff1a;探讨在处理大规模数据集时如何有效地进行数据可视化&#xff0c;如何在大数据分析中有效传达信息&#xff0c;包括交互式探索、实时仪表板和复杂数据故事讲述。 目录 大规模数据可视化的挑战 数据量问题 性能考量 实时数据 数据可视化的关键技术 数据预…

【算法Hot100系列】最长回文子串

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

springboot(ssm川剧科普平台 川剧交流系统 Java系统

springboot(ssm川剧科普平台 川剧交流系统 Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数据库…

NNDL 循环神经网络-梯度爆炸实验 [HBU]

目录 6.2.1 梯度打印函数 6.2.2 复现梯度爆炸现象 6.2.3 使用梯度截断解决梯度爆炸问题 【思考题】梯度截断解决梯度爆炸问题的原理是什么&#xff1f; 总结 前言&#xff1a; 造成简单循环网络较难建模长程依赖问题的原因有两个&#xff1a;梯度爆炸和梯度消失。 循环…

凸函数笔记(1)

目录 1. 凸函数基本概念2.可微函数的凸性判定2.1 函数凸性的微分判据2.2 可微凸函数的例子 3. 保凸运算3.1 复合函数的凸性3.2 几种保凸运算 1. 凸函数基本概念 记 R ‾ : R ∪ { ∞ } . 对函数 f : R n → R ‾ , 称 记\overline{\mathbb{R}}:\mathbb{R}\cup\{\pm\infty\}.…

【MySQL】(DDL) 表操作-查询

查询&#xff1a; show tables ; //查询所有表名称 desc 表名称 ; //查询表结构 show create table 表名称; //查看创建表语句 create table 表名 ( 字段名1 字段类型1,字段名2 字段类型2) ; //创建表结构 示列&#xff1a; 1. show tables; use 数据库名; show tables …

Llama 架构分析

从代码角度进行Llama 架构分析 Llama 架构分析前言Llama 架构分析分词网络主干DecoderLayerAttentionMLP 下游任务因果推理文本分类 Llama 架构分析 前言 Meta 开发并公开发布了 Llama系列大型语言模型 (LLM)&#xff0c;这是一组经过预训练和微调的生成文本模型&#xff0c;参…

uniapp常用api讲解

Uniapp是一个基于Vue.js的跨平台开发框架&#xff0c;可以同时开发微信小程序、H5、App等多个平台的应用。下面是Uniapp常用的API讲解&#xff1a; Vue.js的API Uniapp采用了Vue.js框架&#xff0c;因此可以直接使用Vue.js的API。例如&#xff1a;v-show、v-if、v-for、compu…

二蛋赠书八期:《Java物联网、人工智能和区块链编程实战》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…