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

news2024/12/22 16:16:20

[导读]:超平老师的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.coloradmin.cn/o/1315926.html

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

相关文章

算法模板之单链表图文讲解

🌈个人主页:聆风吟 🔥系列专栏:算法模板、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️使用数组模拟单链表讲解1.1 🔔为什么我们要使用数组去模拟单链表…

appium2.0.1安装完整教程+uiautomator2安装教程

第一步:根据官网命令安装appium(Install Appium - Appium Documentation) 注意npm前提是设置淘宝镜像: npm config set registry https://registry.npmmirror.com/ 会魔法的除外。。。 npm i --locationglobal appium或者 npm…

多线程 (上) - 学习笔记

前置知识 什么是线程和进程? 进程: 是程序的一次执行,一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 线程: 进程中的一个执行流&#xff0…

Element-Ui定制Dropdown组件

1.效果 说明:移入后新增图标,然后移入后图标变色。当然大家可以想到用mouseover移入事件来实现移入颜色的变化,但是在使用Dropdown组件的时候,不支持这种写法。因此采用了原生的遍历对象的形式,为每一个item对象绑定鼠…

通过WinCC基本功能实现批次查询及批次报表

谈到WinCC中的批次数据处理和批次报表,也许有人会想到PM-Quality这款专业的批次报表软件。但如果你的银子有限,批次报表要求又比较简单,不妨看看此文。 —《通过 WinCC 基本功能实现批次数据过滤查询以及打印批次数据报表》 实现的功能描述 …

一维数组的定义

什么是数组? (1)数组是具有一定顺序关系的若干变量的集合,组成数组的各个变量统称为数组的元素 (2)数组中的各元素的数据类型要求相同,用数组名和下标确定,数组可以是一维的&#…

无经验小白开发一个 JavaWeb项目,需要注意哪些要点?

大家好我是咕噜铁蛋 ,我收集了许多来自互联网的宝贵资源,这些资源帮助我学习和理解如何从零开始开发JavaWeb项目。今天,我将与大家分享一些关键的要点,包括项目规划、技术选型、数据库设计、代码编写和测试部署等。如果你有任何问…

大数据存储技术(3)—— HBase分布式数据库

目录 一、HBase简介 (一)概念 (二)特点 (三)HBase架构 二、HBase原理 (一)读流程 (二)写流程 (三)数据 flush 过程 &#xf…

Mysql数据库 19.Mysql 锁

MySQL锁 锁:锁是计算机用以协调多个进程间并发访问同一共享资源的一种机制,在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源,如何保证数据并发访问的一…

【MySQL备份】MySQL备份工具-MyDumper

目录 什么是MyDumper MyDumper优势有哪些 如何安装MyDumper 参数解释 1 mydumper参数解释 备份流程 一致性快照如何工作? 如何排除(或包含)数据库? 输出文件 Metadata文件 ​编辑 表数据 文件 表结构 文件 建库文件…

关于uview-ui的u-tabs标签滑块不居中的问题

在uniapp中,打开文件 uni_modules/uview-ui/components/u-tabs/u-tabs.vue 然后在style中添加以下代码即可 /deep/ .u-tabs__wrapper__nav__line {left: 18rpx; } 之前效果图: 之后效果图: 注意,代码中的18rpx需要自行调整

半导体:Gem/Secs基本协议库的开发(5)

此篇是1-4 《半导体》的会和处啦,我们有了协议库,也有了通讯库,这不得快乐的玩一把~ 一、先创建一个从站,也就是我们的Equipment端 QT - guiCONFIG c11 console CONFIG - app_bundle CONFIG no_debug_release # 不会生…

深入理解JVM设计的精髓与独特之处

这是Java代码的执行过程 从软件工程的视角去深入拆解,无疑极具吸引力:首个阶段仅依赖于源高级语言的细微之处,而第二阶段则仅仅专注于目标机器语言的特质。 不可否认,在这两个编译阶段之间的衔接(具体指明中间处理步…

C语言----文件操作(二)

在上一篇文章中我们简单介绍了在C语言中文件是什么以及文件的打开和关闭操作,在实际工作中,我们不仅仅是要打开和关闭文件,二是需要对文件进行增删改写。本文将详细介绍如果对文件进行安全读写。 一,以字符形式读写文件&#xff…

一文搞懂OSI参考模型与TCP/IP

OSI参考模型与TCP/IP 1. OSI参考模型1.1 概念1.2 数据传输过程 2. TCP/IP2.1 概念2.2 数据传输过程 3. 对应关系4. 例子4.1 发送数据包4.2 传输数据包4.3 接收数据包 1. OSI参考模型 1.1 概念 OSI模型(Open System Interconnection Reference Model)&a…

MLX:苹果 专为统一内存架构(UMA) 设计的机器学习框架

“晨兴理荒秽,带月荷锄归” 夜深闻讯,有点兴奋~ 苹果为 UMA 设计的深度学习框架真的来了 统一内存架构 得益于 CPU 与 GPU 内存的共享,同时与 MacOS 和 M 芯片 交相辉映,在效率上,实现对其他框架的降维打…

【后端卷前端3】

侦听器 监听的数据是 data()中的动态数据~响应式数据 <template><div><p>{{showHello}}</p><button click"updateHello">修改数据</button></div> </template><script>export default {name: "goodsTe…

cesium 自定义贴图,shadertoy移植教程。

1.前言 cesium中提供了一些高级的api&#xff0c;可以自己写一些shader来制作炫酷的效果。 ShaderToy 是一个可以在线编写、测试和分享图形渲染着色器的网站。它提供了一个图形化的编辑器&#xff0c;可以让用户编写基于 WebGL 的 GLSL 着色器代码&#xff0c;并实时预览渲染结…

人工智能与大数据的紧密联系

随着科技的飞速发展&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;和大数据&#xff08;Big Data&#xff09;已成为当今社会的热门话题。人工智能在许多领域的应用越来越广泛&#xff0c;而大数据则提供了支持和驱动AI技术的巨大资源。本…

Android13适配所有文件管理权限

Android13适配所有文件管理权限 前言&#xff1a; 很早之前在Android11上面就适配过所有文件管理权限&#xff0c;这次是海外版升级到Android13&#xff0c;由于选择相册用的是第三方库&#xff0c;组内的同事没有上架Google的经验直接就提交代码&#xff0c;虽然功能没有问题…