兄弟们,刚学编程碰到了一题,抓破脑子了不知道怎么弄求
上机测试题目
输入一个不全相等的四位数,将它分解为四个数,组成最大数和最小数,用最大数减去最小数,得到一个结果,此结果继续分解成四个数,再组成最大数和最小数,用最大数减去最小数,得到一个结果,一直下去,直到减出来的结果为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. 不能使用后面的函数和列表。
要求你独立完成的,再想想,应该不难。
还是给你个参考吧。
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)
我这里给你个算法吧,自己不写代码永远学不会编程的:
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、打印结果 二楼的很不错,不过有两个小问题。
第一:它的程序只能输入思维全不同的才能向下计算,否则就只能一直输入,与题目要求不太一样
第二:对于误操作输入数字以外的字符的情况,没有考虑
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) 膜拜楼上给出代码的大佬我啥时候也可以这么新手拈来! 谢谢兄弟们了,我自己已经弄好了爱你们
页:
[1]