内容正文:
浙江高中技术培优算法(陶小波)
95
附表 3 常见算法一览表
判断质数 1
n = int(input("请输入一个数"))
flag = True
for i in range(2, n):
if n%i==0:
flag = False
if flag:
print(n, "是质数")
else:
print(str(n) + "不是质数")
判断质数 2
import math
n = int(input("请输入一个数"))
flag = True
for i in range(2, int(math.sqrt(n))+1):
if n % i == 0:
flag = False
if flag:
print(n, "是质数")
else:
print(str(n) + "不是质数")
求 1-100 之间范围内质数
import math
for i in range(2, 101):
flag = True
x=int(math.sqrt(i)) + 1
for j in range(2,x ):
if i % j == 0:
flag = False
if flag:
print(i)
输出乘法口诀表
s=""
for i in range(1, 10):
for j in range(1, i + 1):
s=str(j) + " * " + str(i) + " = "
s=s+ str(i * j)
print(s, end=" ")
print()
判断回文 1
n = input()
if n != n[::-1]:
print("不是回文")
else:
print("是回文")
判断回文 2
n = input()
flag = True
for i in range(0, len(n)//2):
if n[i]!=n[len(n)-i-1]:
flag = False
if flag:
print("是回文")
else:
print("不是回文")
2 进制=>10 进制方法 1
n=input()
res=0
for i in range(0,len(n)):
res=res+int(n[i])*2**(len(n)-i-1)
print(res)
2 进制=>10 进制方法 2
n=input()
res=0
for i in range(0,len(n)):
res=res*2+int(n[i])
print(res)
浙江高中技术培优算法(陶小波)
96
10 进制转 2进制(原码)
n=int(input())
res=""
while n!=0:
res=str(n%2)+res
n=n//2
print(res)
10 进制转 16 进制 1(原码)
n=int(input())
res=""
root=["0","1","2","3","4","5","6","7",
"8","9","A","B",
"C","D","E","F"]
while n!=0:
res=root[n%16]+res
n=n//16
print(res)
10 进制转 16 进制 2
n = int(input())
res = ""
while n != 0:
if n % 16 > 9:
res =chr(n % 16+55)+res
else:
res = str(n % 16)+res
n = n // 16
print(res)
10 进制转 2 进制(反码)
注: 例如 30 的原码是 11110,反码 00001
n=int(input())
res=""
while n!=0:
res=str(1-n%2)+res
n=n//2
print(res)
求列表中最大值(不用 Max 函数版本):
ls = []
for i in range(1, 101):
# 随机生成 100 个 10-1000 的随机数
ls.append(random.randint(10,
1000))
max1 = ls[0]
for i in range(1, 100):
# 因为 ls 下标从 0 开始
if ls[i] > max1:
max1 = ls[i]
print(max1)
求列表中最小值(不用 Min 函数版本):
ls = []
for i in range(1, 101):
# 随机生成 100 个 10-1000 的随机数
ls.append(random.randint(10, 1000))
min1 = ls[0]
for i in range(1, 100):
# 因为 ls 下标从 0 开始
if ls[i] < min1:
min1 = ls[i]
print(min1)
a=10
b=20
两值交换 1
t=a
a=b
b=t
两值交换 2
a,b=b,a
数字重组(将 1,2.3-4)5 变为数值型的 12345)
s="1,2.3-4)5"
res=0
for i in s:
if "0"<=i<="9":
res=res*10+int(i)
print(res)
浙江高中技术培优算法(陶小波)
97
水仙花数 1
一个三位数的各个位上的立方之和等于
他本身 例如 1**3+2**3+3**3==123 说明
123 是个水仙花数
for i in range(100,1000):
a=i%10 求个位
b=(i//10)%10 求十位
c=i//100 求百位
if a**3+b**3+c**3==i:
print(i)
水仙花数 2
一个三位数的各个位上的立方之和等于他本身
例如 1**3+2**3+3**3==123 说明123是个水仙
花数
res = temp1 = 0
for i in range(100, 1000):
temp1 = i
res = 0
while temp1 != 0:
res =res+(temp1%10)**3
temp1 = temp1 // 10
if res == i:
print(i)
斐波那契数列(求前十项的和)
n = int(input())
a, b, c = 0, 0, 1
sum1 = 0
for i in range(0, n ):
a = b
b = c
c = a + b
sum1 = sum1 + a
print("第",n,"项",a)
print("前",n,"项和",sum1)
角谷猜想:
n=int(input())
count1=0
while n!=1:
count1=count1+1
if n%2==0:
n=n//2
else:
n=n*3+1
print("变成 1 需要",count1,"步")
哥德巴赫猜想(每一个不小于 6的偶数都
是两个奇素数之和):
def prime(x): #用于判断是否为质数的函
数
flag = True
for i in range(2, x):
if x % i == 0:
flag = False
return flag
n = int(input())
for i in range(2, n-1):
if prime(i) and prime(n - i):
print(i, n - i)
辗转相除法(求最大公约数)
a = int(input())
b = int(input())
x,y=a,b
while b != 0:
r = a % b
a =b
b = r
t=a
print("最大公约数",t)
print("最小公倍数",x*y/t)
浙江高中技术培优算法(陶小波)
98
#字符处理:
#有一串乱码 需要将其中的数字部分提取出
来。
#例如:a1b2c3d4, 要将其中的数字 1234 提
取出来(要求结果为数值型)
s="a1b2c3d4"
res=""
for i in s:
if "0"<=i<="9":
res+=i
print(int(res))
#字符处理 2:
#有一串乱码 需要将其中的数字部分提取出
来。
#例如:9b9ca9, 要将其中的数字 999 提取
出来(要求结果为数值型)
s="9b9ca9"
res=0
for i in s:
if "0"<=i<="9":
res=res*10+int(i)
print(res)
#字符处理 3:
#有一串乱码 需要将其中的数字部分提取出
来求和。
s="1a1b11c45,"
res=0
k=0
for i in s:
if "0"<=i<="9":
res=res*10+int(i)
else:
k=k+res
res=0
print(k)
#字符处理 4(移动位置,向右移动三位,
A=>D,X=>A)
#移动位置,一般都会使用%
n=input()
x=3 #向右移动几位
res=chr((ord(n)-65+x)%26+65) #移动位置
print(res)
#字符处理 5(移动位置,向左移动三位,
D=>A,A=>X)
#移动位置,一般都会使用%
n=input()
x=-3 #向左移动几位
res=chr((ord(n)-65+x)%26+65) #移动位置
print(res)
#字符统计(统计各个字母出现的次数)
#字典:dic={姓名:”张三“}
n=input()
dic={}
for i in n:
if i not in dic:
dic[i]=1
else:
dic[i]+=1
print(dic)