求序列中第k小的数_Python解题记录第14题

c4c66b6b8665cc451b9e3164ca9ff8e8.png

【本文结构】

  1. 题目信息:来源、地址、序号、描述
  2. 题目答案:简要分析,程序代码(测试运行通过,含注释),运行结果
  3. 霍霍磨刀:解答这道题目之前应掌握的知识基础
  4. 解析过程:题目类型,分析以及实践过程
  5. 斩获成果:通过解答这道题目之后的知识提升
  6. 下一题预告:来源、地址、序号、描述

【题目信息】

来源:菜鸟教程

地址:https://dwz.cn/Ol2QUMGD

序号:14

描述:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

【题目答案】

程序分析:

对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

程序代码:

def reduceNum(n): # 定义一个自定义函数

print('{} = '.format(n),end="") # 输出n值

if not isinstance(n, int) or n <= 0 : # 判断n的类型是否为int类型,也就是是否是整型,或者是不是小于0

print('请输入一个正确的数字 !') # 输出提示

exit(0) # 退出程序

elif n in [1] : # 或者判断是否是为1

print('{}'.format(n),end="") # 如果为1,那么1=1

while n not in [1] : # 循环判断不为1

for index in range(2, n + 1) : # 循环比它小的数

if n % index == 0: # 先找到一个最小的质数

n //= index # n 等于 n/index

if n == 1: # 如果n等于1

print(index) # 输出index

else : # 否则

print('{} * '.format(index),end="") # 输出等式右边的值

break # 跳出循环

reduceNum(90) # 函数调用,输入参数90

reduceNum(100) # 函数调用,输入参数100

运行结果:

90 = 2 * 3 * 3 * 5

100 = 2 * 2 * 5 * 5

【霍霍磨刀】

在解答这道题目之前,你首先应具备以下知识基础:

  1. 了解什么是质因数
  2. 掌握基本的for循环,while循环,以及if判断

【解析过程】

题型:{语法实践题}

第一步:什么是质因数?并举例说明

每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。如30=2×3×5 .

举例:

1没有质因子。

5只有1个质因子,5本身。(5是质数。)

6的质因子是2和3。(6 = 2 × 3)

2、4、8、16等只有1个质因子:2(2是质数,4 =2²,8 = 2³,如此类推。)

10有2个质因子:2和5。(10 = 2 × 5)

第二步:用程序来举例说明

因为1没有质因数,所以输入的数必然是2以上,以90为判断,依次除以1,2,3,4,5,6,7,…

90除以2=45,所以2是90的质因数,商为45

45除以2,余数不为0,45除以3,余数为0,因此3是90的质因数,商为15

15除以2,余数不为0,15除以3,余数为0,因此3是90的质因数,商为5

5除以2,3,4,余数均不为0 ,除以5,余数为0,因此5是90的质因数,商为1

因此90的质因数为2,3,3,5

用程序来演示:

n=int(input("请输入一个正整数:")) # 提示输入信息
k=1 # 定义变量k,用来逐步输出每个质因数的序号
while n>1: # 当n值大于1的时候运行下去
for i in range(2,n+1): # 循环2到n之间的值
if n % i==0: # 如果取余为0
print("第{}个质因数:{}".format(k,i)) # 则输出
k=k+1 # k自增1
n=n//i # 同时把n整除i的结果赋值给n
print("剩余的数:", n) # 输出整除之后的n
break # 跳出for循环
else: # 否则
print(n) # 输出n

运行结果:

请输入一个正整数:90

第1个质因数:2

剩余的数: 45

第2个质因数:3

剩余的数: 15

第3个质因数:3

剩余的数: 5

第4个质因数:5

剩余的数: 1

第三步:给出我的答案

根据上面的分析,整理代码,给出我的答案:

n = int(input("请输入一个正整数:")) # 提示输入信息
print("{}=".format(n),end="") # 输出n值
nlist=[] # 定义一个列表
while n > 1: # 当n值大于1的时候运行下去
for i in range(2, n + 1): # 循环2到n之间的值
if n % i == 0: # 如果取余为0
nlist.append(i) # 将质因数保存到列表中
n = n // i # 同时把n整除i的结果赋值给n
break # 跳出for循环# join() 方法用于将序列中的元素(必须是str)以指定的字符 连接生成一个新的字符串
print(" * ".join(str(i) for i in nlist)) # 输出结果

运行结果:

请输入一个正整数:90

90=2 * 3 * 3 * 5

第四步:解释网站答案每段代码

为什么网站给得答案比我给的答案行数多,是因为它是自定义函数,考虑到了程序的健壮性,也就是我们不能相信用户输入的任何字符,要对字符进行验证检查

在网站给出的自定义函数中

首先是对输入的值进行了是否是整数,是否小于0的验证

其次是对输入的值进行了是否等于1的验证

最后才是对输入的值进行了求质因数的操作


【斩获成果】

通过本题的解答,我们学习了如何判断一个数是否为整型,且是否大于0,进而判断是否为正整数的方法

而且通过分析,了解了如何用程序来求正整数的质因数,并实现了相关代码,以及逐段逐行分析了网站给出的程序代码。

举一反三,抛出问题:

1.输入一个正整数,求最大公倍数

2.输入一个正整数,求最小公约数

3. 输入一个正整数,先计算出它下面的质数,再循环质数去判断,是否也是一种解答的可能性

【下一题预告】

来源:菜鸟教程

地址:https://dwz.cn/Ol2QUMGD

序号:15

描述:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值