1.尾数前移
#coding:utf-8
#python趣味百题1
#1.尾数前移:一个数的末位移到首位,等于原来的数的4倍
#1234->4123,1234*4=?4123
#求一个自然数N,个位数是6,将6提到最前面所得数是N的4倍?
#求一个自然数N,个位数是8,将8提到最前面所得数是N的4倍?
def fun(n):
nn = n
t = 6
while nn > 0:
t *= 10
nn //= 10
m = n * 10 + 6
if t + n == m * 4:
print(m)
for i in range(1,100000):
fun(i)
2.水仙花数
#coding=utf-8
#python趣味百题2 水仙花数(100-999)
#这种算法可移植性太差了!可以用其他算法,直接改range()就能获得其他需求
def fun(n):
a = n / 100
b = n / 10 % 10
c = n % 10
if a ** 3 + b ** 3 + c ** 3 == n:
print(n)
for i in range(100,1000):
fun(i)
e=[1,3,5,7,9]
print([x ** 3 for x in e])
print(sum([x ** 3 for x in e]))
#以上用到列表解析:
'''
a=[1,3,5,7,9]
sum([x ** 3 for x in a])
'''
3.不重复的3位数
#coding=utf-8
#python趣味百题3
#不重复的三位数
#0-9可以组成多少个不重复的3位数?
'''
3位数的个,十,百分别表示为a,b,c
a可以取1-9,不能取0
b可以取0-9
c可以0-9
算法可以为:第一种
sum = 0
for i in range(1,1000):
a = i % 10
b = i / 10 % 10
c = i / 100
if c == 0:
continue
if a == b or b == c or c == a:
continue
else:
print(i)
sum += 1
print(sum)
'''
def NotRepeat():
l = range(10)
count = 0
for a in l[1:]:
for b in l:
if a == b:
continue
for c in l:
if c != a and c != b:
print(a,b,c)
count += 1
print(count)
NotRepeat()
4.自守数
#coding=utf-8
#python趣味百题4 自守数
#求10000以内的自守数?
#例子:5×5=25,6×6=36,76×76=5776等等
#思路:
'''
设自守数为i,计算i的位数l,i**2=n,n的后l位数等于i,即为所求。
'''
for i in range(1,10000):
l,j = 1,i
while j / 10 != 0:
l += 1
j /= 10
n = i ** 2
if n % (10 ** l) == i:
print(i)
#多用新算法,见下,多次看到列表解析了,好用。
#用列表解析法一行搞定
print([n for n in range(1,10000) if n * n % (10 ** len(str(n))) == n])
5.孪生素数
#coding=utf-8
#python趣味百题5 孪生素数
#若两个素数之差为2,则这两个素数就是孪生素数
#找出1-100之间的孪生素数
'''
设i为要找的数,
'''
def fun():
l = []
if True:
for i in range(2,100):
for j in range(2,i):
if i % j == 0:
break
else:
continue
else:
l.append(i)
print(l)
for i in range(1,len(l)):
if l[i] - l[i-1] == 2:
print("%d,%d是孪生素数"%(l[i],l[i+1]))
fun()
6.可逆素数
#coding-utf-8
#python趣味百题6 可逆素数
#找出1-1000内的所有可逆素数
#可逆素数是指一个素数的各位数值顺序颠倒后得到的数仍为素数,如113和311
#思路:
'''
应该先判断位数吧,设此数为n,
if n / 10 != 0:
l += 1
n /= 10
print(l) #求几位数
s = n / 10
m = n % 10 #取个位数
nn = m * (10 ** l) + s
if
'''
def fun():
l = []
if True:
for i in range(10,1000):
for j in range(2,i):
if i % j == 0:
break
else:
continue
else:
l.append(i)
print(l)
for n in l:
le = 0
temp = n
while temp // 10 > 0:
le += 1
temp //= 10
#print(le) #求几位数
if le >= 2:
r = n // 100
s = n // 10 % 10
else:
s = n // 10 #取十位数
m = n % 10 #取个位数
if le >= 2:
nn = m * (10 ** le) + s * (10 ** (le-1)) + r
else:
nn = m * (10 ** le) + s
if nn in l and nn != n:
print("%d和%d为可逆素数"%(n,nn))
l.remove(nn)
fun()
#视频介绍的算法不算好,总体算法还是用以上的,不过学到了一个细节:
'''
比如有一个数n=123
要变成321,可以简单地用索引操作和int、str的函数来操作:
n = 123
print(int(str(n)[::-1]))
就得到321了
'''
n = 123
print(int(str(n)[::-1]))
7.等差素数数列
#coding=utf-8
#python趣味百题7 等差素数数列
#类似 7 37 67 97 或者107 137 167 197这样由素数组成的数列叫做等差素数数列
#首先是求出指定范围以内所有的素数
#然后再去取a0,a1,这个是任意的,所以要在素数列表里面找
#下题求的是200以内的所有等差素数数列
def fun():
l = []
if True:
for i in range(2,200):
for j in range(2,i):
if i % j == 0:
break
else:
continue
else:
l.append(i)
print(l)
le = []
for k in range(1,len(l)):
for p in range(k,len(l)):
m = l[p] - l[k-1]
temp = l[p] + m
if temp in l:
le = [l[k-1],l[p],temp]
while temp + m in l:
le.append(temp + m)
temp += m
print(le)
del le
#[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
fun()
8.赛场统分
#coding=utf-8
#python趣味百题8 赛场统分
#有n个裁判计分,打出n个评分,最终要去掉一个最高分,去掉一个最低分
#剩下的n-2个求平均值即为选手的最终打分成绩
'''
思路:
'''
def fun(n):
import random
ls = []
for i in range(n):
ls.append(random.randint(1,100))
ls.sort()
del(ls[0])
del(ls[n-2])
print(sum(ls) / (n-2))
fun(100)
9.回文数
#coding=utf-8
#python趣味百题9 回文数 一个数正读和倒读都一样
#判断一个数是不是回文数
'''
思路:
98789 -> 98789
def fun(n):
'''
def fun(n):
ls = []
while n > 0:
m = n % 10
n //= 10
ls.append(m)
#print(ls)
for i in range(len(ls) // 2):
#print(ls[i])
#print(ls[(-i - 1)])
if ls[i] == ls[(-i - 1)]:
continue
else:
return False
return True
a = fun(7675)
print(a)
10.埃及分数式
#coding=utf-8
#python趣味百题10 埃及分数式
#埃及分数式:只使用分子是1的分数,因此这种分数也叫作埃及分数式
#举个栗子:3/7 = 1/3 + 1/11 + 1/231
#要求输入一个真分数,将该分数分解为埃及分数式
'''
'''
def fun(a,b):
ls = []
k = int(b / a)
if b % a == 0:
res = '1 / %s' % k
else:
k += 1
res = '1 / %s + %s' % (k, fun(a * k -b, b * k))
return res
a,b = eval(input()),eval(input())
print("%d / %d = "%(a,b) + fun(a,b))
#以上可以自定义输入,还能看到输入的结果,加个eval(input())即可
谢谢观看,继续努力。