鱼C论坛

 找回密码
 立即注册
查看: 1845|回复: 6

[已解决]求助大佬,用python写6174

[复制链接]
发表于 2021-11-3 11:13:39 | 显示全部楼层 |阅读模式
15鱼币
1955 年,卡普耶卡对 4 位数字进行了研究,发现一个规律:对任意各位数字不相同的 4 位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到 6174 这个数字,并且这个操作最多不会超过 7 次。编写程序,使用枚举法对这个猜想进行验证。提示:使用 from string import digits 和from itertools import combinations 导入 digits 对象和 combinations 方法。使用字符串的‘ ’.join()方法将字符组合成字符串。
最佳答案
2021-11-3 11:13:40
pallas 发表于 2021-11-3 22:01
print(f"\n组合:{com}")
  这里为什么有个f呢?

from itertools import combinations
from string import digits


def g6174(com, sn):
    if sn > 0:  # sn是记录第几次操作的参数
        print(f"第{sn}次操作:{com}")
    if com == "6174":  # 递归函数的出口,得到6174后不再递归
        return com
    com = list(com)  # 将传入的字符串转换为列表方便排序
    com.sort()  # 以升序方式排序,比如 [0,1,2,3]
    minn = int("".join(com))  # ,组合字符串并转换为整数得到最小值
    com.sort(reverse=True)  # 以降序方式排序,比如[3, 2, 1, 0]
    maxn = int("".join(com))  # 组合字符串并转换为整数得到最大值
    # 最大值减最小值,并将结果转换为字符串,传入g6174函数递归调用,sn+1为记录操作次数的sn变为sn+1
    g6174(str(maxn - minn), sn + 1)


# combinations(digits, 4)意思就是从digits中取4字进行排列组合,返回所有可能的组合
for com in combinations(digits, 4):
    print(f"\n组合:{com}")  # f""是f-string字符串格式化方法,具体用法自行查看
    g6174("".join(com), 0)  # 将字符串元组com的值连接成字符串,例如"".join(("1", "3", "2", "4"))

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-3 11:13:40 | 显示全部楼层    本楼为最佳答案   
pallas 发表于 2021-11-3 22:01
print(f"\n组合:{com}")
  这里为什么有个f呢?

from itertools import combinations
from string import digits


def g6174(com, sn):
    if sn > 0:  # sn是记录第几次操作的参数
        print(f"第{sn}次操作:{com}")
    if com == "6174":  # 递归函数的出口,得到6174后不再递归
        return com
    com = list(com)  # 将传入的字符串转换为列表方便排序
    com.sort()  # 以升序方式排序,比如 [0,1,2,3]
    minn = int("".join(com))  # ,组合字符串并转换为整数得到最小值
    com.sort(reverse=True)  # 以降序方式排序,比如[3, 2, 1, 0]
    maxn = int("".join(com))  # 组合字符串并转换为整数得到最大值
    # 最大值减最小值,并将结果转换为字符串,传入g6174函数递归调用,sn+1为记录操作次数的sn变为sn+1
    g6174(str(maxn - minn), sn + 1)


# combinations(digits, 4)意思就是从digits中取4字进行排列组合,返回所有可能的组合
for com in combinations(digits, 4):
    print(f"\n组合:{com}")  # f""是f-string字符串格式化方法,具体用法自行查看
    g6174("".join(com), 0)  # 将字符串元组com的值连接成字符串,例如"".join(("1", "3", "2", "4"))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-3 11:56:55 | 显示全部楼层
本帖最后由 hrpzcf 于 2021-11-3 16:58 编辑
from itertools import combinations
from string import digits


def g6174(com, sn):
    if sn > 0:
        print(f"第{sn}次操作:{com}")
    if com == "6174":
        return com
    com = list(com)
    com.sort()
    minn = int("".join(com))
    com.sort(reverse=True)
    maxn = int("".join(com))
    g6174(str(maxn - minn), sn + 1)


for com in combinations(digits, 4):
    print(f"\n组合:{com}")
    g6174("".join(com), 0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-3 15:58:20 | 显示全部楼层

for com in combinations(digits, 4):
    print(f"\n组合:{com}")
    g6174("".join(com), 0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-3 16:49:04 From FishC Mobile | 显示全部楼层
本帖最后由 hrpzcf 于 2021-11-3 16:51 编辑
python初学者_1 发表于 2021-11-3 15:58
for com in combinations(digits, 4):
    print(f"\n组合:{com}")
    g6174("".join(com), 0)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-3 21:35:24 | 显示全部楼层

大佬,能稍微解释以下您的代码吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-3 22:01:22 | 显示全部楼层

print(f"\n组合:{com}")
  这里为什么有个f呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 20:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表