鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 156

[复制链接]
发表于 2018-3-2 08:46:49 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-23 12:34
我觉得如果输入的数是6174本身的话就不用输出计算步骤了。

诶呀,我怎么就没有想到小于1000的乘以10呢。。。。。学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-3 17:35:58 | 显示全部楼层
print("输入一个每位数不完全相同的四位正整数:",end = "")
i = int(input())
while i != 6174:
    if i % 1111 == 0:
        print("输入有误,请输入一个每位数不完全相同的四位正整数:")
        i = input()
    i = list(str(i))
    if len(i) == 3:
        i.sort()
        x = int(i[0])*100 + int(i[1])*10 + int(i[2])
        y = int(i[2])*1000 + int(i[1])*100 + int(i[0])*10
        i = y - x
        print("%d - %d = %d" % (y,x,i))
    else:
        i.sort()
        x = int(i[0])*1000 + int(i[1])*100 + int(i[2])*10 + int(i[3])
        y = int(i[3])*1000 + int(i[2])*100 + int(i[1])*10 + int(i[0])
        i = y - x
        print("%d - %d = %d" % (y,x,i))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-3 20:21:09 | 显示全部楼层
  1. def count(number):
  2.     a = list(map(int, str(number)))

  3.     n1 = max(a)
  4.     a.remove(n1)
  5.     n2 = max(a)
  6.     a.remove(n2)
  7.     n3 = max(a)
  8.     a.remove(n3)
  9.     if len(a) != 0:
  10.         n4 = max(a)
  11.     else:
  12.         n4 = 0

  13.     s1 = (n1 * 1000 + n2 * 100 + n3 * 10 + n4)
  14.     s2 = (n4 * 1000 + n3 * 100 + n2 * 10 + n1)
  15.     result = s1 - s2
  16.     print("%d-%d=%d" % (s1, s2, result))
  17.     return result


  18. def main():
  19.     number = input("number=")
  20.     while number != 6174:
  21.         number = count(number)


  22. if __name__ == "__main__":
  23.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 14:54:05 | 显示全部楼层
本帖最后由 瞬秒爆加速 于 2018-3-4 14:55 编辑
  1. a = input()
  2. while True:
  3.     b = [i for i in str(a)]
  4.     if len(b) < 4:
  5.         b.append('0')
  6.     #从小到大排序
  7.     b.sort()
  8.     c = b[:]
  9.     #反序
  10.     b.reverse()
  11.     bb,cc = int("".join(b)),int("".join(c))
  12.     print(("%d-%d=%d")%(bb,cc,bb-cc))
  13.     a = bb-cc
  14.     if a == 6174:
  15.         break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 16:59:20 | 显示全部楼层
  1. def a(x):
  2.     L=list(str(x))
  3.     L.sort()
  4.     s=''
  5.     for i in L:
  6.         s+=i
  7.     a=eval(s[::-1])
  8.     b=eval(s.replace('0',''))
  9.     c=a-b
  10.     print(a,'-',b,'=',c)
  11.     return c
  12. def b(x):
  13.     c=x
  14.     while 1:
  15.         c=a(c)
  16.         if c==6174:
  17.             break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 20:41:48 | 显示全部楼层
  1. def f(a):
  2.         a = list(str(a))
  3.         min = int(''.join(i for i in sorted(a)))
  4.         max = int(''.join(i for i in sorted(a,reverse = True)))
  5.         print(max,'-',min)
  6.         return max-min
  7.        
  8. if __name__ == '__main__':
  9.         a = int(input())
  10.         while True:
  11.                 a = f(a)
  12.                 if a<1000:
  13.                         a *= 10
  14.                 if a == 6174:
  15.                         print('success')
  16.                         break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-13 11:09:50 | 显示全部楼层
inputnum=input("请输入数字:")
for  u   in range(1,8):
list1=[]
i=inputnum[0]
j=inputnum[1]
m=inputnum[2]
n=inputnum[3]
if i==j==m==n:
    print("您输入的数字不符合规则")
    break
else:
   tollist=[]
   for  ii  in  range(0,4):
     for  jj    in  range(0,4):
        for mm   in   range(0,4):
            for  nn   in  range(0,4):
                list2=["","","",""]
                if ii==jj or  ii==mm or ii==nn or jj==mm or jj==nn  or mm==nn:
                    pass
                else:
                  list2[ii]=str(i)
                  list2[jj]=str(j)
                  list2[mm]=str(m)
                  list2[nn]=str(n)
                  str1="".join(list2)
                  tollist.append(int(str1))
   maxnum=max(tollist)
   minnum=min(tollist)
   print("第"+str(u)+"次结果为:"+str(maxnum-minnum))
   if maxnum-minnum==6174:
       break
   else:
    inputnum=str(maxnum-minnum)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 23:45:30 | 显示全部楼层
a=int(input())
while a!=6174 :
    jl=[]
    while a!=0 :
        jl+=[a % 10]
        a=a//10
    while len(jl)<4 :
        jl+=[0]
    jl.sort()
    a1=jl[0]*1000+jl[1]*100+jl[2]*10+jl[3]
    jl.reverse()
    a2=jl[0]*1000+jl[1]*100+jl[2]*10+jl[3]
    a=a2-a1
    print(a2,'-',a1,'=',a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-10 10:33:03 | 显示全部楼层
def fun(num):
    num_list = list(str(num))
    num_list.sort(reverse=True)
    max_num = int("".join(num_list))
    num_list.sort()
    min_num = int("".join(num_list))
    next_num = max_num - min_num
    print("%d-%d=%d"%(max_num, min_num, next_num))
    if len(str(next_num)) < 4:
        a = str(next_num)
        lent = len(a)
        next_num = int(a+"0"*(4-lent))
    if next_num != 6174:
        print(next_num)
        fun(next_num)
    else:
        print(next_num)
        return next_num
fun(7767)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-12 16:58:42 | 显示全部楼层
  1. def number_sort(n):
  2.     ls_min = sorted([x for x in list(str(n))])
  3.     ls_max = list(reversed(ls_min))
  4.     min_n = ""
  5.     max_n = ""
  6.     for i in ls_min:
  7.         min_n += i
  8.     for j in ls_max:
  9.         max_n += j
  10.     return int(max_n), int(min_n)


  11. def number_count():
  12.     number = input("请输入一个4位正整数:")
  13.     for _ in range(7):
  14.         nums = number_sort(number)
  15.         diff = nums[0]-nums[1]
  16.         print("%d - %d = %d" % (nums[0], nums[1], diff))
  17.         number = diff
  18.         if number == 6174:
  19.             return


  20. if __name__ == "__main__":
  21.     number_count()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 21:14:21 | 显示全部楼层
  1. def getCountProgress(num) :
  2.         try :
  3.                 num = int(num)
  4.         except ValueError :
  5.                 print('输入的值有误!')
  6.                 return
  7.         if len(str(num)) != 4 :
  8.                 print('输入的不是四位数!')
  9.                 return
  10.         num = str(num)
  11.         i = 0
  12.         while i < 7 :
  13.                 print('%d - %d = %d' % (getMaxNum(num), getMinNum(num), getMaxNum(num) - getMinNum(num)))
  14.                 if len(num) < 4 :
  15.                         num = str(int(num) * len(num) ** 10)
  16.                 else :
  17.                         num = str(getMaxNum(num) - getMinNum(num))
  18.                 i += 1

  19. def getMaxNum(num) :
  20.         list1 = list(num)
  21.         for i in range(len(list1) - 1) :
  22.                 for j in range(len(list1) - i - 1) :
  23.                         if list1[j] < list1[j + 1] :
  24.                                 list1[j], list1[j + 1] = list1[j + 1], list1[j]
  25.         return int(''.join(list1))


  26. def getMinNum(num) :
  27.         list1 = list(num)
  28.         for i in range(len(list1) - 1) :
  29.                 for j in range(len(list1) - i - 1) :
  30.                         if list1[j] > list1[j + 1] :
  31.                                 list1[j], list1[j + 1] = list1[j + 1], list1[j]
  32.         return int(''.join(list1))

  33. a = input('请输入一个四位数:')
  34. getCountProgress(a)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-5 12:00:38 | 显示全部楼层
本帖最后由 咕咕鸡鸽鸽 于 2019-5-5 12:24 编辑
  1. def fun156(num):
  2.     while num != 6174:
  3.         if len(str(num)) != 4:
  4.             num = int(str(num) + (4 - len(str(num)))*"0")
  5.         max1 = int("".join(sorted(list(str(num)),reverse=True)))
  6.         min1 = int("".join(sorted(list(str(num)))))
  7.         num = max1 - min1
  8.         print("{} - {} = {}".format(max1,min1,num))
  9.         
  10.     print("over")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-9 09:56:55 | 显示全部楼层
def toList(n):
    a = []
    while n < 1000:
        n *= 10
    for i in str(n):
        a.append(int(i))
    a.sort()
    return a
def maxa(n):   
    rep = 0
    a = toList(n)
    a.reverse()
    for i in a:
        rep = rep*10+i
    return rep
def mina(n):
    rep = 0
    a = toList(n)
    for i in a:
        rep = rep*10+i
    return rep     
while True:
    n = input('请输入四位非重复数字:')
    if not n:
        break
    n=int(n)
    while (n - 6174):
        a=maxa(n)
        b=mina(n)
        n=a-b
        print("%d-%d=%d"%(a,b,n))
        
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-9 17:11:28 | 显示全部楼层
  1. from functools import reduce
  2. input_str=input('请输入四位正整数')
  3. max_list=sorted(input_str,reverse=True)
  4. min_list=sorted(input_str)
  5. def fun156(max_list,min_list):
  6.     max_num=reduce(lambda x,y:int(x)*10+int(y),max_list)
  7.     min_num=reduce(lambda x,y:int(x)*10+int(y),min_list)
  8.     while max_num-min_num!=6174:
  9.         if max_num==min_num:
  10.             max_num*=10
  11.         print(f'{max_num}-{min_num}={max_num-min_num}')
  12.         new_str=str(max_num-min_num)
  13.         max_list=sorted(new_str,reverse=True)
  14.         min_list=sorted(new_str)
  15.         max_num=reduce(lambda x,y:int(x)*10+int(y),max_list)
  16.         min_num=reduce(lambda x,y:int(x)*10+int(y),min_list)
  17.     print(f'{max_num}-{min_num}={max_num-min_num}')
  18. fun156(max_list,min_list)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 20:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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