鱼C论坛

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

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

[复制链接]
发表于 2018-2-23 19:44:20 | 显示全部楼层
flag1 = 1
while flag1:
    m = input("请输入一个四位数: ")
    n = list(m)
    if len(n)!= 4:
        print("请输入四位数")
    elif n[0]==n[1] and n[1]==n[2] and n[2]==n[3]:
        print("四个数字不能完全一样")
    else:
        flag1 = 0
        flag2 = 1
        count = 0
        while flag2:
            z = n
            p = [int(x) for x in sorted(n)]
            q = [int(x) for x in reversed(p)]
            n = list(str(q[0]*1000+q[1]*100+q[2]*10+q[3]-p[0]*1000-p[1]*100-p[2]*10-p[3]))
            if n == z:
                flag2 = 0
                print(int(n[0])*1000+int(n[1])*100+int(n[2])*10+int(n[3]))

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1 7767时出错

查看全部评分

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

使用道具 举报

发表于 2018-2-23 20:01:06 | 显示全部楼层
  1. class Kaprekar_4:
  2.     def __init__(self,i):
  3.         self.t=0
  4.         self.n=[i]     
  5.     def routine(self):
  6.         s=[]
  7.         i=self.n[self.t]
  8.         while i:
  9.             s.append(i%10)
  10.             i//=10
  11.         while len(s)<4:
  12.             s.append(0)            
  13.         s.sort()
  14.         b=s[0]*1000+s[1]*100+s[2]*10+s[3]
  15.         s.reverse()
  16.         a=s[0]*1000+s[1]*100+s[2]*10+s[3]
  17.         self.n.append(a-b)
  18.         self.t+=1
  19.            
  20. def q156():
  21.     s=[]
  22.     for i in range(10000):
  23.         if i%1111==0:
  24.             s.append([i,0,'不是有效数字'])
  25.             continue
  26.         k=Kaprekar_4(i)
  27.         while k.n[k.t]!=6174:
  28.             if k.t==7:
  29.                 print(k.n,"不符合假设")
  30.             else :
  31.                 k.routine()        
  32.         if k.n[k.t]==6174:
  33.             s.append(k.n+[str(k.t)+' times'])
  34.         else:
  35.             s.append(k.n+['超过次数'])
  36.     return s

  37. s=q156()
  38. #无输出即是验证成功
  39. #可用s[x]查看过程,x为0~9999之间的数字
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-23 20:12:07 | 显示全部楼层
123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-23 20:35:24 | 显示全部楼层
def xx1(a):
    a1 = a.copy()
    for x in range(0, len(a) -1):
        for y in range(0, len(a)-x-1):
            if a[y + 1] > a[y]:
                c = a[y]
                a[y] = a[y + 1]
                a[y + 1] = c
            if a1[y + 1] < a1[y]:
                bb = a1[y]
                a1[y] = a1[y + 1]
                a1[y + 1] = bb
    aa = ''
    cc = ''
    for xx in a:
        aa += str(xx)
    for yy in a1:
        cc += str(yy)
    c = int(aa) - int(cc)
    return int(aa),int(cc),c
def yy1(c):
    b = []
    for x in str(c):
        b.append(x)
    return b
def main():
   #输入8878
    q = 8878
    q1 = yy1(q)
    c = xx1(q1)
    v = c[2]
    print('%s - %s = %s'%(int(c[0]),int(c[1]),int(c[2])))
    if len(str(v)) <4:
        v = str(v)
        v += '0'
    b= yy1(v)
    f =xx1(b)
    f1 = f[2]
    print('%s - %s = %s' % (int(f[0]), int(f[1]), int(f[2])))
    while len(str(f1)) <4:
        f1 = str(f)
        f1 += '0'
    b = yy1(f1)
    f = xx1(b)
    f2 = f[2]
    print('%s - %s = %s' % (int(f[0]), int(f[1]), int(f[2])))
    while len(str(f2)) <4:
        f2 = str(f)
        f2 += '0'
    b = yy1(f2)
    f = xx1(b)
    f3 = f[2]
    print('%s - %s = %s' % (int(f[0]), int(f[1]), int(f[2])))
    while len(str(f3)) <4:
        f3 = str(f)
        f3 += '0'
    b = yy1(f3)
    f = xx1(b)
    f4 = f[2]
    print('%s - %s = %s' % (int(f[0]), int(f[1]), int(f[2])))
main()

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1 2687时没有计算完毕

查看全部评分

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

使用道具 举报

发表于 2018-2-23 20:42:55 | 显示全部楼层
num = input("请输入一个四位不相同的正整数:")
def fun(n):
    num1 = [int(i)for i in str(n)]
    num1.sort()
    if num1[0] == 0:
        num2 = num1[3] * 1000 + num1[2] * 100 + num1[1] * 10 + num1[0]
        num3 = num1[1] * 100 + num1[0] * 100 + num1[2] * 10 + num1[3]
    else:
        num2 = num1[3] * 1000 + num1[2] * 100 + num1[1] * 10 + num1[0]
        num3 = num1[0] * 1000 + num1[1] * 100 + num1[2] * 10 + num1[3]
    if num2 - num3 != 6174:
        print("{0} - {1} = ".format(num2, num3), num2-num3)
        fun(num2 - num3)
    else:
        print("{0} - {1} = ".format(num2, num3), num2 - num3)
res = fun(num)








评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1 7767时错误

查看全部评分

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

使用道具 举报

发表于 2018-2-23 20:45:49 | 显示全部楼层
def min_1(a):
    a_new = ''
    for i in range(4):
        min_px = 9
        for each in a:
            if int(each) < min_px:
                min_px = int(each)
                min_num = a.find(each)
        a = a[:min_num] + '9' + a[min_num + 1:]
        a_new += str(min_px)
    return a_new

def max_1(a):
    a_new = ''
    for i in range(4):
        max_px = 0
        for each in a:
            if int(each) > max_px:
                max_px = int(each)
                max_num = a.find(each)
        a = a[:max_num] + '0' + a[max_num + 1:]
        a_new += str(max_px)
    return a_new

n = input('输入一个4位整数')
if int(n) % 1111 != 0:
    for i in range(7):
        answer = int(max_1(n)) - int(min_1(n))
        print(max_1(n) + '-' + min_1(n) + '=' + str(answer))
        if answer == 6174:
            break
        elif answer/1000 >= 1:
            n = str(answer)
        else:
            n = '0' + str(answer)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-23 20:53:08 | 显示全部楼层
#递归算法

def xx1(a):
    if a == 6174:
        return a
    else:
        while len(str(a)) < 4:
            a = str(a)
            a += '0'
        b = []
        for x in str(a):
            b.append(x)
        b1 = b.copy()
        for x in range(0, len(b) -1):
            for y in range(0, len(b)-x-1):
                if b[y + 1] > b[y]:
                    c = b[y]
                    b[y] = b[y + 1]
                    b[y + 1] = c
                if b1[y + 1] < b1[y]:
                    bb = b1[y]
                    b1[y] = b1[y + 1]
                    b1[y + 1] = bb
        aa = ''
        cc = ''
        for xx in b:
            aa += str(xx)
        for yy in b1:
            cc += str(yy)
        print ('%s - %s = %s'%(int(aa) , int(cc), int(aa)-int(cc)))
        return xx1(int(aa) - int(cc))

def main():
    while True:
        try:
            c1 = int(input('请输入一个四位数:'))
            if len(str(c1)) == 4:
                c = xx1(c1)
                print(c)
            else:
                print('请输入4位数谢谢')

        except ValueError as a2:
            print('异常信息:%s'%a2)
main()

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-23 21:05:11 | 显示全部楼层
答题人这么多,专辑越来越受欢迎了
  1. def fun(num):
  2.     num = str(num)
  3.     assert len(num) == 4 and len(set(num)) > 1

  4.     for i in range(7):
  5.         min_num = "".join(sorted(str(num) + '0000'))
  6.         num = int(min_num[-1:-5:-1]) - int(min_num[-4:])
  7.         
  8.         if num == 6174:
  9.             return True
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-23 21:06:27 | 显示全部楼层
import random
##取4个随机数组成列表
lst = [0,1,2,3,4,5,6,7,8,9]
list1=random.sample(lst,4)
n=1
while n!=6174:
    ##排序
    list1.sort()
    ##最小组合数与最大组合数
    minn=list1[0]*1000+list1[1]*100+list1[2]*10+list1[3]
    maxn=list1[3]*1000+list1[2]*100+list1[1]*10+list1[0]
    n=maxn-minn
    print(maxn,'-',minn,'=',n)
    ##差不足4位末尾补零
    if n<1000:
        n=n*10
    ##数字转列表
    list1=list(map(int,str(n)))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-23 23:26:32 | 显示全部楼层
a = input('请输入任意四位正整数(相同除外,i.e. 1111):')
while int(a) !=6174:
    c1 = 0
    d1 = 0
    b=c=d=[]
    b = [i for i in a]
    c = sorted(b,reverse=True)
    for i in range(4):
        c1 = c1 + int(c[i])*10**i
    d = sorted(b)
    for j in range(4):
        d1 = d1 + int(d[j])*10**j
    a1 = d1-c1
    print('%d - %d = %d'%(d1,c1,a1))
    if a1>1000:
        a = str(a1)
    elif a1>100:
        a = str(a1*10)
    elif a1>10:
        a = str(a1*100)
    else:
        a = str(a1*1000)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-24 06:38:41 | 显示全部楼层
def ListMaxMin2(temp,num):
    a_max = sorted(temp, reverse=True)
    a_min = sorted(temp, reverse=False)
    if a_min == a_max:
        print("不能为4位相同数")
        return
    result_list= ListJianFa(a_max, a_min)
    b_list = list(map(str, result_list))
    b_str=''.join(b_list)
    print(b_str)
    num=num+1
    if int(b_str)!=6174:
        (a, num)=ListMaxMin2(result_list,num)
    return (result_list,num)

a=random.randint(1000,9999)
print(a)
a_list=list(map(int,str(a)))
ListMaxMin(a_list)
(result_list,num)=ListMaxMin2(a_list,0)
print(num,'<=7 满足条件')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-24 09:20:19 | 显示全部楼层
本帖最后由 被翻红浪 于 2018-2-25 21:13 编辑
  1. def kaprekarConstant(n):
  2.     result = 0
  3.     temp = n
  4.     while result != 6174:
  5.         maxNum = int(''.join(sorted(str(temp).zfill(4), reverse=True)))
  6.         minNum = int(''.join(sorted(str(temp))))
  7.         result = maxNum - minNum
  8.         print(maxNum, '-', minNum, '=', result)
  9.         temp = result
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-24 10:53:58 | 显示全部楼层

  1. n=8762
  2. p=0   
  3.    
  4. while p<7:
  5.         list1=[]
  6.         while len(str(n))>1:
  7.             list1.append(n%10)
  8.             
  9.             n=n//10
  10.             
  11.         list1.append(n)
  12.         
  13.         list1.sort(key=lambda x:-1*x)
  14.    
  15.         list2=sorted(list1)
  16.         if len(list1)<4:
  17.             list1.append(0)
  18.         s=""
  19.         
  20.         for i in list1:
  21.             s=s+str(i)
  22.         big=int(s)
  23.         
  24.         d=''
  25.         for i in list2:
  26.             d=d+str(i)
  27.         small=int(d)
  28.         
  29.         an=big-small
  30.         
  31.         if an!=6174:
  32.             p=p+1
  33.             n=an
  34.             print("%d-%d=%d"%(big,small,an))
  35.         if an==6174:
  36.             print("%d-%d=%d"%(big,small,an))
  37.             break
  38.             
  39.    
  40.         
  41.         
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-24 11:16:54 | 显示全部楼层
# -*- coding:utf-8 -*-
def four_num(innum):           #这个def是返回最大四位数
    max_num = sorted(innum)
    if len(max_num) != 4:
        print('请输入四位数字')
    for i in max_num:
        if max_num.count(i) == 4:
            print('请僌四位不同数字')
            break
        else:
            return max_num

def int_num(innum):           #这个def是返回最大四位数与最小四位数的第一次相减
    mix_true_num = [int(x) for x in four_num(innum)]
    man_true_num = [int(y) for y in (sorted(mix_true_num,reverse=True))]
    mix_true_num1 = int(''.join(([str(i) for i in mix_true_num])))
    man_true_num1 = int(''.join(([str(i) for i in man_true_num])))
    if len(str((man_true_num1-mix_true_num1))) != 4:
        return (man_true_num1-mix_true_num1)*10    #后面补零
    else:
        return man_true_num1 - mix_true_num1


        
temp = input('------------------>')
int_num(temp)


小甲鱼老师,我写到这实在写不下去了  能帮我一下么~~~~~没有写完  实在不会了 应该会用上递归
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-24 11:35:01 | 显示全部楼层
  1. def fun(x):
  2.     if x == 6174:
  3.         print("程序结束")
  4.                
  5.     else:
  6.         temp = list(str(x))
  7.         
  8.         if temp[0]==temp[1]==temp[2]==temp[3]:
  9.             print("数字%s的四位数都相同,不符合" % ''.join(temp))
  10.             x=input("请输入一个四位数:")
  11.             fun(x)
  12.         else:
  13.             max_num = sorted(temp,reverse=True)
  14.             min_num = list(reversed(max_num))
  15.             
  16.             max_num=int(''.join(max_num))
  17.             min_num=int(''.join(min_num))
  18.             result = max_num-min_num
  19.                        
  20.             print('%d-%d = %d' % (max_num,min_num,result))
  21.             if result < 1000:
  22.                 result*=10
  23.             fun(result)

  24. x = input("请输入一个四位数:")

  25. while len(x) != 4:
  26.     x=input("输入不符,请输入一个四位数:")
  27. else:
  28.     fun(x)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-24 12:18:46 | 显示全部楼层
def run():
        a=input('请输入一个小于5位数的整数')
        if len(a)<4:
                a=int(a)*(10**(4-len(a)))
        i=0
        while(a!=6174):
                b=''.join(sorted(str(a)))
                c=''.join(sorted(str(a),reverse=True))
                a=int(c)-int(b)
                i+=1
        print (a,'一共运行:',i,'次')
run()

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1 7677时出错

查看全部评分

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

使用道具 举报

发表于 2018-2-24 13:10:07 | 显示全部楼层
成功了,嘿嘿

  1. def count(num):
  2.         smail =big= ''
  3.         num_l = []
  4.         for x in num:
  5.                 num_l.append(x)
  6.         smail = ''.join(sorted(num_l))
  7.         big = ''.join(sorted(num_l,reverse=True))
  8.         result = int(big)-int(smail)
  9.         if len(str(result)) != 4:
  10.                 result = result*10
  11.         print(big+'-'+smail+'='+str(result))
  12.         if result==6174:
  13.                 exit()
  14.         return count(str(result))


  15. num = input()
  16. # num = '9870'
  17. count(num)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-24 14:48:51 | 显示全部楼层
very well
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-24 15:28:49 | 显示全部楼层
本帖最后由 JessiFly 于 2018-2-24 16:46 编辑
  1. magic_str = input('请输入一个每位数不完全相同的四位正整数:')
  2. magic_num = int(magic_str)

  3. while magic_num != 6174:
  4.         list1 = []
  5.         for i in str(magic_num):
  6.             list1.append(i)                         #['2','6','8','7']
  7.         list1.sort()                                #['2','6','7','8']
  8.         #若四位数升序排序后第一个数为0,则去掉第一个0
  9.         if list1[0] == '0':
  10.                 list2 = list1[1:]
  11.         else:
  12.                 list2 = list1[:]
  13.         small_str = ''.join(list2)                  #'2678'
  14.         list1.reverse()                             #['8','7','6','2']
  15.         big_str = ''.join(list1)                    #'8762'
  16.         magic_num = int(big_str) - int(small_str)   #6084  
  17.         print(big_str + '-' + small_str + '=' + str(magic_num))
  18.         if magic_num / 1000 < 1:
  19.             magic_num *= 10
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-2-24 15:40:39 | 显示全部楼层
# -*- coding:utf-8 -*-
def ture_num(innum):  # 这个def是返回最大四位数
    if len(str(innum)) != 4:
        print('请输入4位整数')
        exit()
    for i in str(innum):
        if str(innum).count(i) == 4:
            print('输入4位不同整数')
            exit()
    return innum


def four_num(max, min):
    int1 = str(max - min)
    if len(int1) != 4:
        return int(int1) * 10
    else:
        return int(int1)


def min_num(innum):
    number = sorted(str(ture_num(innum)))
    number1 = [int(x) for x in number]
    number2 = int(''.join(([str(i) for i in number1])))
    return number2

def max_num(innum):
    number = sorted(str(ture_num(innum)),reverse=True)
    number1 = [int(x) for x in number]
    number2 = int(''.join(([str(i) for i in number1])))
    return number2


def real_number(innum):
    max = max_num(innum)
    min = min_num(innum)
    number = four_num(max,min)
    print('%d-%d=%d'%(max,min,number))

    if number != 6174:
        real_number(number)


temp = int(input('------'))
real_number(temp)

写出来了鱼哥

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 08:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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