鱼C论坛

 找回密码
 立即注册
查看: 2101|回复: 5

[已解决]兄弟们,刚学编程碰到了一题,抓破脑子了不知道怎么弄求

[复制链接]
发表于 2020-10-21 10:47:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

上机测试题目

输入一个不全相等的四位数,将它分解为四个数,组成最大数和最小数,用最大数减去最小数,得到一个结果,此结果继续分解成四个数,再组成最大数和最小数,用最大数减去最小数,得到一个结果,一直下去,直到减出来的结果为6174为止,求最后结果得到6174的步长。
   例如:输入1234,排列后最大数为4321,最小数1234,4321-1234=3087;得到的结果3087再排列最大数为8730,最小数0378,8730-0378=8352;继续:8532-2358=6174,此时输出的步长为3。
   
要求程序的输出结果如下:
运行程序后:

请输入一个四位数:1234
步长=3

第二次运行程序后:

请输入一个四位数:2222
不能四位相同,请重新输入一个四位数:34
不是四位数:请重新输入一个四位数:1234
步长=3

注意:
1. 若输入别的数据,输出的步长应该在1~7之间。
2. 程序一样的,或者思路相同,两者无效,将被判零分。
3. 不能使用网络上的程序,必须按照要求的输出结果输出。
4. 尽自己的能力做多少,算多少,必须是自己独立完成的。
5. 不能使用后面的函数和列表。

最佳答案
2020-10-21 11:54:35
要求你独立完成的,再想想,应该不难。






还是给你个参考吧。
n = (input("请输入一个四位数:"))
while True:
    if len(n) != 4:
        n = input("不是四位数:请重新输入一个四位数:")
    elif len(set(n)) != len(n):
        n = input("不能四位相同,请重新输入一个四位数:")
    else:
        break
    
step = 1
while True:
    lst = [i for i in str(n)]
    lst.sort(reverse = True)
    maxnum = int(''.join(lst))
    lst.sort()
    minnum = int(''.join(lst))
    n = maxnum - minnum
    if n == 6174:
        break
    step += 1
print("步长=", step)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-21 11:54:35 | 显示全部楼层    本楼为最佳答案   
要求你独立完成的,再想想,应该不难。






还是给你个参考吧。
n = (input("请输入一个四位数:"))
while True:
    if len(n) != 4:
        n = input("不是四位数:请重新输入一个四位数:")
    elif len(set(n)) != len(n):
        n = input("不能四位相同,请重新输入一个四位数:")
    else:
        break
    
step = 1
while True:
    lst = [i for i in str(n)]
    lst.sort(reverse = True)
    maxnum = int(''.join(lst))
    lst.sort()
    minnum = int(''.join(lst))
    n = maxnum - minnum
    if n == 6174:
        break
    step += 1
print("步长=", step)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-21 14:27:34 | 显示全部楼层
我这里给你个算法吧,自己不写代码永远学不会编程的:
1、构建循环获取用户输入:例如 先while True,再x=input
1)判断输入是否合法
2)先判定是否全为数字可用函数x.isdigit(),如果否,则用continue跳转回循环头
3)如果都是数字,则判断输入数字长度len(x),否则跳转回循环头
4)全数字,长度4,则排序后判断是否有相等的数字。例如可采用max()函数,并加入列表以供后续计算使用
2、构建循环排序计算,步长可定义一个计数器变量存放。例如while result != 6174(等于6174则跳出循环了)
1)排序计算也简单。结合max()和min()以及列表的sort方法即可
3、打印结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-21 14:47:17 | 显示全部楼层
二楼的很不错,不过有两个小问题。
第一:它的程序只能输入思维全不同的才能向下计算,否则就只能一直输入,与题目要求不太一样
第二:对于误操作输入数字以外的字符的情况,没有考虑
num=input("请输入一个四位数:")
while True:
    if num.isdigit():
        if int(num) in range(1000,10000):
            if len(set(num))==1:
                num=input("不能四位相同,请重新输入一个四位数:")
            else:    
                break
        else:
            num=input("不是四位数:请重新输入一个四位数:")
    else:
        num=input("请输入一个四位数:")
step=0
while True:
    maxnum=''.join(sorted(num,reverse=True))
    minnum=''.join(sorted(num))
    num=int(maxnum)-int(minnum)
    step+=1
    if num==6174:
        break
    num=str(num)
    if len(num)<4:
        num+='0'*(4-len(num))
print("步长=",step)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-21 15:49:25 | 显示全部楼层
膜拜楼上给出代码的大佬  我啥时候也可以这么新手拈来!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-22 02:31:32 | 显示全部楼层
谢谢兄弟们了,我自己已经弄好了爱你们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 07:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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