You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:24:00