一:求一个整数的质因数
题目描述
编写一个程序,返回给定整数的质因数。
定义函数get_prime_factors(),该函数接受一个参数num(正整数)。
该函数应返回传入参数的质因数列表,且从小到大排序。
比如150的质因数分解如下:
150 = 2*3*5*5
因此,150的质因数是[2, 3, 5]。
示例输入
150
示例输出
[2, 3, 5]
解释: 150的质因数是[2, 3, 5]。
在返回的列表中某个质因数只出现一次。
判断num是为质数,可直接使用函数is_prime()。
来源/分类(难度系数:一星)
数组 循环结构
完整代码展示:
a=int(input())
b=[]
for i in range(2,a):
j=2
k=int(pow(i,0.5))
while j<=k:
if i%j==0:
break
j+=1
if j>k and a%i==0:
b.append(i)
b.sort()
print(b)
a=int(input())
b=[]
for i in range(2,a):
j=2
k=int(pow(i,0.5))
while j<=k:
if i%j==0:
break
j+=1
if j>k and a%i==0:
b.append(i)
b.sort()
print(b)
代码解释:
“a=int(input()) ”,导入用户输入的需要分解质因数的整数a。
“b=[]
for i in range(2,a):
j=2
k=int(pow(i,0.5))
while j<=k:
if i%j==0:
break
j+=1
if j>k and a%i==0:
b.append(i) ”,建立一个空列表b,接着依次遍历2~a-1的数字i,根据质数的定义判断i是否为质数:如果i是质数且i能将a整除,则将i添加进b中。
“b.sort()
print(b) ”,对b中元素进行升序排序,最后打印b。
运行效果展示:
二:字符串的镜像
题目描述
一个单词的镜像图像是如果将单词放在镜子前看到的内容。 由于镜子会横向反转图像,所以只有以下字符对才可能形成镜像图像:b 和 d,p 和 q,i 和 i,o 和 o,x 和 x,v 和 v,w 和 w,u 和 u,m 和 m。
编写一个程序来创建一个字符串的镜像图像。
定义函数mirror_image(),它有一个参数str(字符串)。
在函数内部,如果字符串str无法形成镜像图像,返回Not Possible。
否则,返回镜像字符串。
比如void的镜像图像是biov,类似如下:
void | biov
示例输入
void
示例输出
biov
你可以使用[::-1]来反转字符串。
非镜像字符串一定包含不可形成镜像的字符。
来源/分类(难度系数:二星)
字符串 列表
完整代码展示:
a=list(input())
b=['b','d','i','m','o','p','q','u','v','w','x']
sum=0
for i in range(0,len(a)):
if a[i] in b:
sum+=1
if sum!=len(a):
print("Not Possible")
else:
a.reverse()
sum=""
for i in range(0,len(a)):
if a[i]=="b":
sum+="d"
elif a[i]=="d":
sum+="b"
elif a[i]=="p":
sum+="q"
elif a[i]=="q":
sum+="p"
else:
sum+=a[i]
print(sum)
a=list(input())
b=['b','d','i','m','o','p','q','u','v','w','x']
sum=0
for i in range(0,len(a)):
if a[i] in b:
sum+=1
if sum!=len(a):
print("Not Possible")
else:
a.reverse()
sum=""
for i in range(0,len(a)):
if a[i]=="b":
sum+="d"
elif a[i]=="d":
sum+="b"
elif a[i]=="p":
sum+="q"
elif a[i]=="q":
sum+="p"
else:
sum+=a[i]
print(sum)
代码解释:
“a=list(input()) ”,导入用户输入的需要判断是否存在镜像的字符串,并将其储存在列表a中。
“b=['b','d','i','m','o','p','q','u','v','w','x'] ”,建立一个列表b,用于储存b与d等镜像字符。
“sum=0
for i in range(0,len(a)):
if a[i] in b:
sum+=1 ”,令sum=0,遍历a中元素,并判断该元素是否在列表b中:如果在,则sum+1。
“if sum!=len(a):
print("Not Possible")
else:
a.reverse()
sum=""
for i in range(0,len(a)):
if a[i]=="b":
sum+="d"
elif a[i]=="d":
sum+="b"
elif a[i]=="p":
sum+="q"
elif a[i]=="q":
sum+="p"
else:
sum+=a[i]
print(sum) ”,判断sum是否等于列表a的长度:如果不是,则打印”Not Possible”;否则将a反转,建立一个空字符串sum,接着遍历a中元素,令sum连接该元素的镜像字符。最后打印sum的最终结果。
运行效果展示:
三:加数
题目描述
给出一个正整数 n,在 n 的右边加入 ⌊n/2⌋,然后在新数的右边再加入 ⌊⌊n/2⌋/2⌋ 一直这样进行下去,直到加入的数为 0 为止(注意,0 不应当被加入)。
求加数结束后新数的长度。
输入
一行一个整数 n。
输出
一行一个整数,为加数结束后新数的长度。
样例输入1
37
样例输出1
8
提示
数据范围:1≤n≤105。
样例解释
⌊37/2⌋=18,加到 n 的右边成为 3718;
⌊18/2⌋=9,加到新数的右边成为 37189;
⌊ 9/2⌋=4到新数的右边成为 371894; ⌊4/2 ⌋=2到新数的右边成为 3718942;
⌊2/2 ⌋ =1到新数的右边成为 37189421; ⌊1/2 ⌋ =0数结束,最后得到的数是一个 8 位数。
来源/分类(难度系数:一星)
每日一题 模拟
完整代码展示:
a=int(input())
sum="{}".format(a)
while a>1:
a=a//2
sum+=str(a)
print(len(sum))
a=int(input())
sum="{}".format(a)
while a>1:
a=a//2
sum+=str(a)
print(len(sum))
代码解释:
“a=int(input()) ”,导入用户需要进行加数处理的数字a。
“sum="{}".format(a) ”,将a转换为字符串并赋值给b。
“while a>1:
a=a//2
sum+=str(a) ”,当a>1时:将a替换为a除以2所的数的整数部分。接着令sum连接新数a转换得到的字符串。直至a==1,跳出整个while循环。
“print(len(sum)) ”,打印字符串sum的最终长度。
运行效果展示:
(声明:以上内容均为原创)