如何不使用sort()/sorted()函数对四位数字符串排序实现Kaprekar运算
四位数字符串最值排序实现(不使用sort/sorted函数)
实现思路
仅使用min()、max()、len()函数完成排序的核心逻辑是逐次提取剩余字符的最值:
- 生成最大数字符串:每次从剩余的数字字符中取出最大值,拼接到结果中,直到所有字符提取完成
- 生成最小数字符串:每次从剩余的数字字符中取出最小值,拼接到结果中,直到所有字符提取完成
完整修改后代码
# 生成四位数字符串对应的最大重排结果 def get_max_num_str(s): char_list = list(s) result = "" # 循环次数等于字符长度,兼容带前导零的四位输入 for _ in range(len(char_list)): current_max = max(char_list) result += current_max char_list.remove(current_max) return result # 生成四位数字符串对应的最小重排结果 def get_min_num_str(s): char_list = list(s) result = "" for _ in range(len(char_list)): current_min = min(char_list) result += current_min char_list.remove(current_min) return result num = input("请输入一个四位整数:") # 初始化迭代次数 i = 0 kaprekar = num # 卡普雷卡 routine 循环 while kaprekar != '6174': i += 1 # 不足四位补前导零 kaprekar = kaprekar.zfill(4) # 生成重排后的最大数和最小数 num1 = get_max_num_str(kaprekar) num2 = get_min_num_str(kaprekar) difference = str(int(num1) - int(num2)) print(f"{kaprekar} > ", end='') kaprekar = difference print(kaprekar) print(f"{num} 经过卡普雷卡迭代共需要 {i} 次得到6174")
内容的提问来源于stack exchange,提问作者Aaron Horowitz
相关产品推荐
相关产品推荐

