dengjiaxi 发表于 2020-10-21 10:47:30

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


上机测试题目

输入一个不全相等的四位数,将它分解为四个数,组成最大数和最小数,用最大数减去最小数,得到一个结果,此结果继续分解成四个数,再组成最大数和最小数,用最大数减去最小数,得到一个结果,一直下去,直到减出来的结果为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 =
    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)

笨鸟学飞 发表于 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、打印结果

sunrise085 发表于 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)

少时诵诗书的赵 发表于 2020-10-21 15:49:25

膜拜楼上给出代码的大佬我啥时候也可以这么新手拈来!

dengjiaxi 发表于 2020-10-22 02:31:32

谢谢兄弟们了,我自己已经弄好了爱你们
页: [1]
查看完整版本: 兄弟们,刚学编程碰到了一题,抓破脑子了不知道怎么弄求