37、回文数 Ⅰ
题目:若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如:87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
现在给你一个正整数M(12 <= M <= 100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。
例如:M=87,则输出4.
参考答案:
M = 87
i = 0
while i <= 8:
if str(M) == str(M)[::-1]:
print(i)
break
else:
M = M + int(str(M)[::-1])
i += 1
if i == 9:
print(0)
38、回文数 Ⅱ
题目:又是回文数!但这次有所不同了。
给定一个N进制正整数,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。
如果N超过10,使用英文字母来表示那些大于9的数码。例如对16进制数来说,用A表示10,用B表示11,用C表示12,用D表示13,用E表示14,用F表示15。
例如:10进制87则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
给你一个正整数N(2<=N<=16)和字符串M("1"<=M<="30000"(10进制)),表示M是N进制数,输出最少经过几步可以得到回文数。
如果在30步以内(含30步)不可能得到回文数,则输出0。输入的数保证不为回文数。
如N=10, M="87", 则输出4.注意:M是以字符串的形式给定的。
参考答案:
def s(a,n): # 10进制数a变为n进制数(string)
d = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
a,b = int(a),''
while a > 0:
if a % n < 10:
b += str(a % n)
else:
b += d[a % n]
a = a // n
return b[::-1]
def f(a,n): # n 进制数变a为10进制数(int)
d = {'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
a,b = str(a),0
a = a[::-1]
for i in range(len(a)):
if a[i] not in 'ABCDEF':
b += int(a[i])*n**i
else:
b += d[a[i]]*n**i
return b
def h(m,n):
step = 0
while str(m) != str(m)[::-1]:
m = f(m,n) + f(str(m)[::-1],n)
m = s(m,n)
step += 1
if step > 30:
return 0
break
return step
M,N = 87,10
print(h(M,N))
39、最小路径和
题目:给你一个由非负整数组成的矩阵M,请你找到一条从矩阵左上角到右下角的路径,使其和最小,并输出最小路径的和(注意:每次只能向右走或者向下走)。
例如:
M = [[1, 2, 3],
[1, 2, 3],
[1, 3, 3]]
则输出:9
说明:最小路径上的值分别为(1->1->1->3->3)。
提示:动态规划,还没了解
其他参考答案:(难以想出)
M = [[1, 2, 3],
[1, 2, 3],
[1, 3, 3]]
L = M
s = len(L) # 行数
t = len(L[0]) # 列数
for i in range(s):
for j in range(t):
if i == 0 and j != 0:
L[i][j] += L[i][j-1] # 算出向右行驶的距离
if j == 0 and i != 0:
L[i][j] += L[i-1][j] # 算出向下走的距离
if i != 0 and j != 0:
L[i][j] += min(L[i-1][j],L[i][j-1]) # 从后向前推,取最小
print(L[s-1][t-1])
40、欧拉函数1
题目:欧拉函数的定义是:对于n,Eurla(n)为与n互质的小于n的正整数的个数。
给定n(n<=1000),输出Eurla(n)
欧拉函数参考:https://blog.csdn.net/liuzibujian/article/details/81086324
参考代码:
def yinzi(n):
yz = []
for i in range(1,n+1):
if n % i == 0:
yz.append(i)
return (yz)
n = 12
y0 = yinzi(n) # 求出n的所有因子
s = 0
for i in range(1,n):
y = yinzi(i) # 求出每一个比n小的数的因子
jiaoji = [j for j in y0 if j in y] # 求两个因子集的交集
if jiaoji == [1]: # 如果交集只有1,则符合条件
s += 1
print(s)
求出这些数:
def yinzi(n):
yz = []
for i in range(1,n+1):
if n % i == 0:
yz.append(i)
return (yz)
n = 12
y0 = yinzi(n) # 求出n的所有因子
s = 0
f = []
for i in range(1,n):
y = yinzi(i) # 求出每一个比n小的数的因子
jiaoji = [j for j in y0 if j in y] # 求两个因子集的交集
if jiaoji == [1]: # 如果交集只有1,则符合条件
f.append(y)
m= []
for i in range(len(f)):
for b in f[i]:
if b not in m:
m.append(b)
print(m)
网友评论