[Python]递归实现求最大公约数算法
编写递归程序实现辗转相除法求最大公约数。
输入
两个由逗号隔开的正整数
输出
它们的最大公因数
样例输入 复制
16,24
样例输出 复制
8
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
input_str = input()
num1, num2 = map(int, input_str.split(','))
result = gcd(num1, num2)
print(result)
[Python递归]7的个数
输入一个正整数,输出其中7的个数,递归实现。
说明:本题是练习递归的,请自觉使用递归实现
输入
一个正整数
输出
其中7的个数
样例输入 复制
76370
样例输出 复制
2
def count_seven(n):
if n == 0:
return 0
else:
return (1 if n % 10 == 7 else 0) + count_seven(n // 10)
num = int(input())
result = count_seven(num)
print(result)
[Python递归]缺失的数字
给定一个单调不减的数字(例如12248),求出最高位和最低位之间缺失的数字个数(12248中1和8之间缺失3567,个数为4,2233中2和3之间不缺,个数为0)。
输入
一个单调不减的数字
输出
最高位和最低位之间缺失的数字个数
样例输入 复制
12248
样例输出 复制
4
def missing_numbers(num):
num_str = str(num)
low, high = int(num_str[0]), int(num_str[-1])
count = 0
for i in range(low + 1, high):
if str(i) not in num_str:
count += 1
return count
num = int(input())
print(missing_numbers(num))
[Python递归]代码抄袭检测
老板发现程序员 Haibara 疯狂生产代码,在几秒钟之内写了 4869 行代码,觉得不可思议,于是去找 Haibara 求教,Haibara 说她 Ctrl C + Ctrl V 了程序员 Bolt 的代码,老板又找到了 Bolt,Bolt 又说他抄了 FZD 的代码 ...... 老板非常生气,于是找到了你,给你一把特制 W968 作为报酬,请你帮他找出这段代码的作者并整治抄代码的行为。
输入
输入是一个列表 f,程序员从 0 到 len(f) - 1 编号
f[i] 代表编号为 i 的程序员直接抄袭的程序员的编号,如果他没有抄袭则 f[i] == i
数据保证不会出现闭环,即类似 1 抄 2,2 抄 3,3 抄 1 的情况。
输出
输出一个列表 f,f[i] 代表编号为 i 的程序员抄袭的源头程序员的编号,如果他没有抄袭则 f[i] == i。
样例输入 复制
[2, 1, 1]
样例输出 复制
[1, 1, 1]
提示
建议使用 eval() 函数处理输入
样例的解释:0 抄 2,2 抄 1,1 没有抄袭,所以 0 和 2 抄袭的源头都是 1,由于 1 没有抄袭,所以 f[1] == 1。
def find_source(f, i):
if f[i] == i:
return i
else:
return find_source(f, f[i])
def main():
f = eval(input())
for i in range(len(f)):
f[i] = find_source(f, i)
print(f)
if __name__ == "__main__":
main()