【Python 百练成钢】分解质因数、龟兔赛跑、时间转换、完美的代价、芯片测试

简介: 【Python 百练成钢】分解质因数、龟兔赛跑、时间转换、完美的代价、芯片测试

🤡前言🤡


今天分享的几道算法题难度适中,有的涉及到字符串处理,有的涉及到矩阵计算、有的涉及到数学相关的知识。相对来说实现起来还是很容易的。😸

分解质因数(将给定区间的数分解为质因数相乘的形式)

龟兔赛跑(小学数学知识,进行模拟即可)

时间转换(将以秒为单位的数转换为时间)

完美的代价(统计字符串转换为回文串至少交换几次)

芯片测试(有点离散数学的味道)


💟分解质因数💞


💜问题描述💜


问题描述

 求出区间[a,b]中所有整数的质因数分解。

输入格式

 输入两个整数a,b。

输出格式

 每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)

样例输入

3 10

样例输出

3=3

4=22

5=5

6=23

7=7

8=222

9=33

10=25

提示

 先筛出所有素数,然后再分解。

数据规模和约定

 2<=a<=b<=10000


💜问题分析💜


先找出输入区间的所有的质数.然后遍历输入的区间,将其分解的结果以字符串的形式进行进行拼凑

加入到结果链表中,第一个因数直接加进去,后来的加上*加进去。如果没有质因数可以分解,就选定

数本身加进去。


💜代码实现💜


老规矩先上运行结果:


12f18e06b9e34f2e9e04b6f100f919a0.png


这里需要注意的是字符串的join方法如果加入参数的是字符串的话会对所加入的字符串进行迭代

会使字符串乱序,所以我们使用了+直接对字符串进行拼接。


# 判断是不是素数
from math import sqrt
def judge(n):
    flag=True
    for j in range(2,int(sqrt(n))+1):
        if n%j==0:
            flag=False
    return flag        
ans=[]
a,b=map(int,input().split())
ta=[]
for i in range(2,b+1):
    if judge(i):
        ta.append(i)
print(ta)
for k in range(a,b+1):
    flag=True
    temp=""
    tk=k
    while k:
        for t in ta:
            if k%t==0 and flag:
                flag=False
                temp=f"{k}={t}"
                # print("temp1--->",temp)
                k/=t
                break
            elif k%t==0:
                # temp=temp.join(f"*{t}")
                temp+=f"*{t}"
                # print("temp2--->",temp)
                k/=t
                break
        else:
            break
    if k==tk:
        ans.append(f"{k}={k}")
    else:
        ans.append(temp)
for i in ans:
    print(i)


💟龟兔赛跑💞


💙问题描述💙


问题描述

 话说这个世界上有各种各样的兔子和乌龟,但是 研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。

于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。

他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,

它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。

然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1

(表示每秒兔子能跑v1 米),乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。

但是小华很懒,不想通过手工计算推测出比赛的结果,于是他找 到了你——清华大学计算机系的高才生——请求帮助,

请你写一个程序,对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。

输入格式

 输入只有一行,包含用空格隔开的五个正整数v1,v2,t,s,l,其中(v1,v2<=100;t<=300;s<=10;l<=10000且为v1,v2的公倍数)

输出格式

 输出包含两行,第一行输出比赛结果一个大写字母“T”或“R”或“D”,分别表示乌龟获胜,兔子获胜,或者两者同时到达终点。

 第二行输出一个正整数,表示获胜者(或者双方同时)到达终点所耗费的时间(秒数)。

样例输入

10 5 5 2 20

样例输出

D

4

样例输入

10 5 5 1 20

样例输出

R

3

样例输入

10 5 5 3 20

样例输出

T

4


4

💙问题分析💙


使用枚举法,进行枚举,以循环变量作为秒数,每轮循环代表一秒,乌龟每次都会移动,而兔子只会在特定的情况下移动,并且每达到一定距离差异就会使兔子无法移动,直到解除。所以我们可以定义一个变量记录兔子还有几秒开始移动,如果标记为0的话兔子就可以移动,循环终止条件是兔子乌龟任意一方通过终点,或者双方同时通过终点。


💙代码实现💙


老规矩先上运行结果:

edbf86cf77a3456781b8fc90febdb8bb.png


# 键入五个数据(兔子、乌龟、兔子休息距离、兔子休息间隔、赛道长度)
v1,v2,t,s,l=map(int,input().split())
# 兔子与乌龟的距离
x1,x2=0,0
# 记录兔子是否有冷确时间
cd=0
# 总时间
tim=0
while x1<l and x2<l:
    x2+=v2
    if cd==0:
        x1+=v1
    else:
        cd-=1
    if (x1-x2)>=t and cd==0:
        cd=s
    tim+=1
if x1>x2:
    print("R")
elif x1<x2:
    print("T")
else:
    print("D")
print(tim)


💟时间转换💞


💚问题描述💚


问题描述

 给定一个以秒为单位的时间t,要求用 <H>:<M>:<S>的格式来表示这个时间。<H>表示时间,<M>表示分钟, 而<S>表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。

输入格式

 输入只有一行,是一个整数t(0<=t<=86399)。

输出格式

 输出只有一行,是以“<H>:<M>:<S>”的格式所表示的时间,不包括引号。

样例输入

0

样例输出

0:0:0

样例输入

5436

样例输出

1:30:36


💚问题分析💚


将时间的时分秒分别相成数值中的百十个位,对秒数进行取余,分别得到每一位上的数值

得到之后进行取整,再去获取高位。


💚代码实现💚


老规矩先上运行结果:


299e2b4bee5d4f56baa90a0800c86363.png

n=int(input())
# 时
h=0
# 分
m=0
# 秒
s=0
s=n%60
n=n//60
m=n%60
n=n//60
h=n%60
print(f"{h}:{m}:{s}")


💟完美的代价💞


💛问题描述💛


问题描述

 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。

 交换的定义是:交换两个相邻的字符

 例如mamad

 第一次交换 ad : mamda

 第二次交换 md : madma

 第三次交换 ma : madam (回文!完美!)

输入格式

 第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)

 第二行是一个字符串,长度为N.只包含小写字母

输出格式

 如果可能,输出最少的交换次数。

 否则输出Impossible

样例输入

5

mamad

样例输出

3


💛问题分析💛


如果将其可以转换为回文串,那么字符串中的奇数个字母必定小于等于1个,否则将无法对称

在进行交换的时候保持一边不动,移动另一边。可以使用贪心策略,每次都选出一对字符进行弹出

如果有一个字符没有匹配到,就将他到中间位置的距离记录下来,然后设置一个标记位,如果再有一次没有匹配到证明不符合规则,就进行Impossible打印。


💛代码实现💛


老规矩先上运行结果:


dd170de97912420aa0c54b4eddeabbcd.png


# 接收输入的字符串长度
n=int(input())
# 接收输入的字符串
mystr=list(input())
# 记录结果
ans=0
# 标记位,出现两次匹配不到的情况就打印IM
flag=False
while len(mystr)>1:
    for i in range(len(mystr)-1,0,-1):
        if mystr[0]==mystr[i]:
            mystr.pop(0)                     
            ans+=(len(mystr)-i)
            mystr.pop(i-1)
            break
        elif i==1:
            mystr.pop(0)
            if n%2==0 or flag:
                print("Impossible")
                exit(0)
            flag=True
            ans += len(mystr)//2
print(ans)


💟芯片测试💞


🤎问题描述🤎


问题描述

 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多。

 每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏。而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即此结果与被测试芯片实际的好坏无关)。

 给出所有芯片的测试结果,问哪些芯片是好芯片。

输入格式

 输入数据第一行为一个整数n,表示芯片个数。

 第二行到第n+1行为n*n的一张表,每行n个数据。表中的每个数据为0或1,在这n行中的第i行第j列(1≤i, j≤n)的数据表示用第i块芯片测试第j块芯片时得到的测试结果,1表示好,0表示坏,i=j时一律为1(并不表示该芯片对本身的测试结果。芯片不能对本 身进行测试)。

输出格式

 按从小到大的顺序输出所有好芯片的编号

问题分析:

由于好的芯片比坏的芯片多,所以在进行坏芯片给自己的的测试是好坏随机

所以可以得出,如果一个芯片是坏的那么这个芯片对应的测试中0的个数必定大于1的个数

也可以理解为好的芯片经过测试1的个数大于0的个数

样例输入

3

1 0 1

0 1 0

1 0 1

样例输出

1 3


🤎问题分析🤎


题目给出好芯片的个数多,那么对于一个芯片而言如果证明他的好的指标大于芯片数一半的时候

他就是一个好的芯片.以这一条逻辑统计每一个芯片好指标的个数,然后判断好坏。


🤎代码实现🤎


老规矩先上运行结果

2bee09f027654087afa874c80b40e744.png

67a8542e43ae47ffbcfb12f0a49cd11a.png

n=int(input())
# 存储好芯片的个数
ans=[]
ls=[list(map(int,input().split())) for x in range(n)]
ls=list(zip(*ls))[::][::]
k=1
for i in ls:
    if sum(i)>n/2:
        ans.append(k)
    k+=1
flag=True
for i in ans:
    if flag:
        flag=False
        print(i,end="")
    else:
        print(f" {i}",end="")


相关文章
|
1月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
97 5
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
130 3
|
1月前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
|
1月前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
|
9天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
43 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
8天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
25 2
|
12天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
37 3
|
11天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
26 1
|
1月前
|
数据可视化 算法 Python
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
本文介绍了如何利用Python脚本结合动态模态分解(DMD)技术,分析从OpenFOAM模拟中提取的二维切片数据,以深入理解流体动力学现象。通过PyVista库处理VTK格式的模拟数据,进行POD和DMD分析,揭示流场中的主要能量结构及动态特征。此方法为研究复杂流动系统提供了有力工具。
66 2
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
|
19天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
24 1

热门文章

最新文章