超级素数python_不配图了,继昨天内容(习题答案)

如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?

for a in range(0,1001):

for b in range(0,1001):

if a**2+b**2==(1000-a-b)**2:

print(a,b,1000-a-b)

给定一个列表,判断其中所有的字符是不是都只出现过一次。

import random

a=["a","b","c","d","c","n","b"]

b=list(set(a))

#求交集

c = (list(set(a).intersection(set(b))))

print("只出现一次的元素为",c)

#为啥求差集没用呢

d=list(set(a).difference(set(c)))

print(d)

给定两个字符串,str1,str2,判断两个字符串中出现的字符是否全部种类一样,数量一样。

例如:

str1 = “apple”, str2 = “paple”, 返回 True;

str1 = “pear”, str2 = “bears”, 返回 False。

str1 = "apple"

str2 = "paple"

str1=list(str1)

print(str1)

str2=list(str2)

print(str2)

#对他们进行排序之后再进行比较 ,计算机自己排序还能有问题马

print(str1.sort())

print(str2.sort())

if list(str1) == list(str2):

print("true")

else:

print("false")

# for k in (0,len(str1)):

# print(list(str1[k]))

# for i in (0,len(str2)):

# print(list(str2[i]))

# if str1[k] == str2[i]:

# print("true")

# else:

# print("false")

计算斐波那契数列。具体什么是斐波那契数列,那就是0,1,1,2,3,5,8,13,21,34,55,89,144,233。

a = 0

b = 1

while 1:

c = a+b

a = b+c

b = c+a

print(c,a,b)

if b >= 233:

print("计算完了")

break

给定字符串str 和一个整数k。如果str中恰好出现了连续的k个0,则将k个0删除。 比如,给定字符串str = “0000fw300001203h000ui0000re3_0000”,k=4。返回的结果为“fw31203h000uire3_”。

import re

abc = "0000fw300001203h000ui0000re3_0000"

#abc = input("请输入您要消去的字符串")

# k = int(input("输入连续0的个数"))

#使用正则表达式的sub替换函数来进行消去

#n=re.sub(r'(0{k})',"",abc)

n=re.sub(r'(0{4})',"",abc)

print(n)

给定一个数组 strs,其中的数据都是字符串,给定两个字符串 str1,str2。如果这两个字符串都在 strs数组中,就返回它们之间的最小距离;如果其中任何一个不在里面,则返回 -1;如果两个字符串相等,则返回 0。

strs = ["1","2","3","4","5","6","7"]

str1 ="1"

str2 = "5"

if str1 in strs and str2 in strs:

a = strs.index(str1) - strs.index(str2)

a = abs(a)

if a == 0:

print(0)

else:

print("最短距离",a)

elif str1 == str2:

print(0)

else:

print(-1)

给定一组非负整数,起始位置是这一组非负整数的第一个整数的索引位置。

该组整数中的每一个元素代表了在该元素位置可以向前跳跃的最大步长。算法任务是以最小的步数从起始索引位置跳到最后的索引位置。

比如,给定数组 A = [2,3,1,1,4],最小的跳越次数是 2,(从0位置跳跃1步到1位置,然后跳跃3步到最后的索引位置)。

假设:一定可以从第一个索引跳跃到最后一个索引位置。

如果一个数字能表示成 p^q,且p是一个素数,q为大于1的正整数,则此数字就是超级素数幂。

param number: 测试该数字是否是超级素数幂

return: 如果不是就返回 False,如果是就返回 p 和 q 值

例如,输入125,返回(5,3)

import math

def get_prime(number):

'''

寻找小于number的所有的质数,时间复杂度o(n^2)

'''

if number <= 1:

print('Wrong given number.')

return

prime = []

for i in range(2, number + 1):

j = 2

while j < i:

if i % j == 0:

break

j += 1

if j == i:

prime.append(i)

return prime

def super_prime_power(number):

scope = int(math.ceil(math.sqrt(number))) # 开根号除掉一部分不需要的数

prime_number = get_prime(scope)

be_tested = []

for i in prime_number: # 先将无法被整数的排除掉

if number % i == 0:

be_tested.append(i)

for p in be_tested:

q = 2

while p ** q <= number:

if p ** q == number:

return (p, q)

q += 1

return False

print(super_prime_power(125))

汉诺塔给出最优解,如果对汉诺塔的定义有不了解,请翻看数据结构教材。除了最基本的之外,还有一题,给定一个数组,arr=[2,3,1,2,3],其含义是这是一个有5个圆盘的汉诺塔,每一个数字代表这个圆盘所在的位置,1代表左边的柱子,2代表中间,3代表右边。给出这个序列代表了汉诺塔移动的第几步,如果该步骤是错误的,则返回-1,所谓错误,是指该步骤不是最简便的得到汉诺塔序列的操作步骤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值