鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 354

[复制链接]
发表于 2020-3-18 14:59:05 | 显示全部楼层
稍微再等等,五点能提交新方案,暴力的已发。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 15:57:17 | 显示全部楼层
def n354(left:int, right:int):
    temp = []
    result = []
    for i in range(left, right+1):
        f = set(str(i))
        if i != 0 and '0' not in f:
            for j in f:
                if i % int(j) != 0:
                    temp.append(0)
                else:
                    temp.append(1)
            set1 = set(temp)
            temp.clear()

            if len(set1) == 1 and 1 in set1:
                result.append(i)
    return result

print(n354(1,10000))
               

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-18 16:18:14 | 显示全部楼层
  1. def f354(left, right):
  2.     list_num = []
  3.     for num in range(left, right+1):
  4.         str_num = str(num)
  5.         if '0' not in str_num:
  6.             for i in str_num:
  7.                 if num % int(i):
  8.                     break
  9.                 else:
  10.                     continue
  11.             else:
  12.                 list_num.append(num)
  13.         else:
  14.             continue
  15.     else:
  16.         print(list_num)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-18 18:03:20 | 显示全部楼层    本楼为最佳答案   
  1. def q354(left,right):
  2.     result = []
  3.     for each in range(left,right+1):
  4.         a, b= each%10, each
  5.         while  b:
  6.             if not a:
  7.                 break
  8.             elif each%a:
  9.                 break
  10.             else:
  11.                 b //= 10
  12.                 a = b%10
  13.         else:
  14.             result.append(each)
  15.     return result
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-18 18:42:53 | 显示全部楼层
这个比暴力破解时间的40%左右 速度有点进步,但是代码超机长。累死我了
  1. def fun354(left,right):
  2.     def num2digital(num):
  3.         result = []
  4.         while num:
  5.             result.append(num%10)
  6.             num = num // 10
  7.         result.reverse()
  8.         return result
  9.     def digital2num(arr):
  10.         result = 0
  11.         for each in arr:
  12.             result = result * 10 + each
  13.         return result
  14.     def GongBei(iterobj):
  15.         result = 1
  16.         for each in iterobj:
  17.             result = result*each//Gongyue(result,each)
  18.         return result
  19.     def Gongyue(a,b):
  20.         if a<b:
  21.             a,b = b,a
  22.         while b:
  23.             a,b = b,a%b
  24.         return a
  25.     def Ji():
  26.         if m != M:
  27.             if dic['bits']<M and dic['bits']>m:
  28.                 if dic['index'] < dic['bits'] - 1:
  29.                     Deal(1,10,2,Ji)
  30.                 else:
  31.                     Deal(1,10,2,Ji,True)
  32.             elif dic['bits'] == M:
  33.                 if temp == right_arr[0:dic['index']]:
  34.                     standard = right_arr[dic['index']]
  35.                     if dic['index'] < dic['bits'] - 1:
  36.                         Deal(1,standard+1,2,Ji)
  37.                     else:
  38.                         Deal(1,standard+1,2,Ji,True)
  39.                 else:
  40.                     if dic['index'] < dic['bits'] - 1:
  41.                         Deal(1,10,2,Ji)
  42.                     else:
  43.                         Deal(1,10,2,Ji,True)
  44.             else:
  45.                 if temp == left_arr[0:dic['index']]:
  46.                     standard = left_arr[dic['index']]
  47.                     if dic['index'] < dic['bits'] - 1:
  48.                         Deal(9,max([standard-1,0]),-2,Ji)
  49.                     else:
  50.                         Deal(9,max([standard-1,0]),-2,Ji,True)
  51.                 else:
  52.                     if dic['index'] < dic['bits'] - 1:
  53.                         Deal(1,10,2,Ji)
  54.                     else:
  55.                         Deal(1,10,2,Ji,True)
  56.         else:
  57.             if right_arr[0:dic['index']] == left_arr[0:dic['index']]:
  58.                 s1 = left_arr[dic['index']]
  59.                 s2 = right_arr[dic['index']]
  60.                 if dic['index'] < dic['bits'] - 1:
  61.                     Deal((s1//2)*2+1,s2+1,2,Ji)
  62.                 else:
  63.                     Deal((s1//2)*2+1,s2+1,2,Ji,True)
  64.             else:
  65.                 if temp < right_arr[0:dic['index']] and temp > left_arr[0:dic['index']]:
  66.                     if dic['index'] < dic['bits'] - 1:
  67.                         Deal(1,10,2,Ji)
  68.                     else:
  69.                         Deal(1,10,2,Ji,True)
  70.                 elif temp == right_arr[0:dic['index']]:
  71.                     standard = right_arr[dic['index']]
  72.                     if dic['index'] < dic['bits'] - 1:
  73.                         Deal(1,standard+1,2,Ji)
  74.                     else:
  75.                         Deal(1,standard+1,2,Ji,True)
  76.                 else:
  77.                     standard = left_arr[dic['index']]
  78.                     if dic['index'] < dic['bits'] - 1:
  79.                         Deal(9,max([standard-1,0]),-2,Ji)
  80.                     else:
  81.                         Deal(9,max([standard-1,0]),-2,Ji,True)
  82.    
  83.     def Ou():
  84.         if m != M:
  85.             if dic['bits']<M and dic['bits']>m:
  86.                 if dic['index'] < dic['bits'] - 1:
  87.                     Deal(1,10,1,Ou)
  88.                 else:
  89.                     Deal(2,10,2,Ou,True)
  90.             elif dic['bits'] == M:
  91.                 if temp == right_arr[0:dic['index']]:
  92.                     standard = right_arr[dic['index']]
  93.                     if dic['index'] < dic['bits'] - 1:
  94.                         Deal(1,standard+1,1,Ou)
  95.                     else:
  96.                         Deal(2,standard+1,2,Ou,True)
  97.                 else:
  98.                     if dic['index'] < dic['bits'] - 1:
  99.                         Deal(1,10,1,Ou)
  100.                     else:
  101.                         Deal(2,10,2,Ou,True)
  102.             else:
  103.                 if temp == left_arr[0:dic['index']]:
  104.                     standard = left_arr[dic['index']]
  105.                     if dic['index'] < dic['bits'] - 1:
  106.                         Deal(9,max([standard-1,0]),-1,Ou)
  107.                     else:
  108.                         Deal(8,max([standard-1,0]),-2,Ou,True)
  109.                 else:
  110.                     if dic['index'] < dic['bits'] - 1:
  111.                         Deal(1,10,1,Ou)
  112.                     else:
  113.                         Deal(2,10,2,Ou,True)
  114.         else:
  115.             if right_arr[0:dic['index']] == left_arr[0:dic['index']]:
  116.                 s1 = left_arr[dic['index']]
  117.                 s2 = right_arr[dic['index']]
  118.                 if dic['index'] < dic['bits'] - 1:
  119.                     Deal(max([s1,1]),s2+1,1,Ou)
  120.                 else:
  121.                     Deal(max([2,((s1+1)//2)*2]),s2+1,2,Ou,True)
  122.             else:
  123.                 if temp < right_arr[0:dic['index']] and temp > left_arr[0:dic['index']]:
  124.                     if dic['index'] < dic['bits'] - 1:
  125.                         Deal(1,10,1,Ou)
  126.                     else:
  127.                         Deal(2,10,2,Ou,True)
  128.                 elif temp == right_arr[0:dic['index']]:
  129.                     standard = right_arr[dic['index']]
  130.                     if dic['index'] < dic['bits'] - 1:
  131.                         Deal(1,standard+1,1,Ou)
  132.                     else:
  133.                         Deal(2,standard+1,2,Ou,True)
  134.                 else:
  135.                     standard = left_arr[dic['index']]
  136.                     if dic['index'] < dic['bits'] - 1:
  137.                         Deal(9,max([standard-1,0]),-1,Ou)
  138.                     else:
  139.                         Deal(8,max([standard-1,0]),-2,Ou,True)
  140.     def Deal(start,end,step,func,mode = False):
  141.         for each in range(start,end,step):
  142.             temp.append(each)
  143.             if mode == False:
  144.                 dic['index'] += 1
  145.                 func()
  146.                 temp.pop()
  147.             else:
  148.                 Num = digital2num(temp)
  149.                 Div = GongBei(set(temp))
  150.                 if Num % Div == 0:
  151.                     result.append(Num)
  152.                 temp.pop()
  153.         dic['index'] -= 1
  154.   
  155.     if left == right:
  156.         temp = num2digital(left)
  157.         Div = GongBei(set(temp))
  158.         if left % Div == 0:
  159.             return [left]
  160.         else:
  161.             return []
  162.     if right <= 10:
  163.         return [i for i in range(left,min(right+1,10))]
  164.     elif left < 10:
  165.         result = [i for i in range(left,10)]
  166.         left = 10
  167.     else:
  168.         result = []
  169.     left_arr = num2digital(left)
  170.     m = len(left_arr)
  171.     right_arr = num2digital(right)
  172.     M = len(right_arr)
  173.     dic = {'index':0,'bits':0}
  174.     if m!=M:
  175.         for each in range(m,M+1):
  176.             temp = []
  177.             dic['bits']=each
  178.             Ji()
  179.             dic['index']=0
  180.             Ou()
  181.             dic['index']=0
  182.     else:
  183.         for i in range(1,m):
  184.             if left_arr[0:i]!=right_arr[0:i]:
  185.                 break
  186.         dic['bits']=m
  187.         dic['index']=i-1
  188.         temp = []
  189.         temp.extend(left_arr[0:(i-1)])
  190.         Ji()
  191.         dic['index']=i-1
  192.         temp = []
  193.         temp.extend(left_arr[0:(i-1)])
  194.         Ou()
  195.     result.sort()
  196.     return result
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2020-3-18 18:47:25 | 显示全部楼层
楼主,可能我的代码太长了,还需要审核 。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 19:17:06 | 显示全部楼层
来了,刚看到,写个无脑版本。
  1. def day354(left, right):
  2.   numberlist = []
  3.   nnl = []
  4.   for i in range(left ,right):
  5.     numberlist.append(i + 1)
  6.   for i in range(len(numberlist)):
  7.     number = numberlist[i]
  8.     nlist = list(str(number))
  9.     pass1 = 0
  10.     for each in range(len(str(number))):
  11.       if int(nlist[each]) == 0:
  12.         pass1 += 1
  13.       elif number % int(nlist[each]) == 0:
  14.         pass1 += 1  
  15.     if pass1 == len(str(number)):        
  16.       nnl.append(number)
  17.   print(nnl)   
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 19:18:51 | 显示全部楼层
fan1993423 发表于 2020-3-17 17:39
这道题思路很容易想到,但考虑到是效率题,所以还是要从效率入手。在323055,41520421这数据,我测了下是14 ...

10不是吗 ,我输1,10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 19:27:03 | 显示全部楼层
小甲鱼de粉丝 发表于 2020-3-18 19:17
来了,刚看到,写个无脑版本。

我重发
  1. def day354(left, right):
  2.   if not(left < 1):
  3.     numberlist = []
  4.     nnl = []
  5.     for i in range(left ,right):
  6.       numberlist.append(i + 1)
  7.     for i in range(len(numberlist)):
  8.       pass2 = 1
  9.       number = numberlist[i]
  10.       nlist = list(str(number))
  11.       pass1 = 0
  12.       for i2 in nlist:
  13.         if i2 == "0":
  14.           pass2 = 0
  15.       if not(pass2 == 0):   
  16.         for each in range(len(str(number))):
  17.           if int(nlist[each]) == 0:
  18.             pass1 += 1
  19.           elif number % int(nlist[each]) == 0:
  20.             pass1 += 1  
  21.         if pass1 == len(str(number)):        
  22.           nnl.append(number)
  23.     print(nnl)   
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 19:33:49 | 显示全部楼层

这个,抱歉,发现有bug

  1. def day354(left, right):
  2.   if not(left < 1):
  3.     numberlist = []
  4.     nnl = []
  5.     numberlist.append(1)
  6.     for i in range(left ,right):
  7.       numberlist.append(i + 1)
  8.     for i in range(len(numberlist)):
  9.       pass2 = 1
  10.       number = numberlist[i]
  11.       nlist = list(str(number))
  12.       pass1 = 0
  13.       for i2 in nlist:
  14.         if i2 == "0":
  15.           pass2 = 0
  16.       if not(pass2 == 0):   
  17.         for each in range(len(str(number))):
  18.           if int(nlist[each]) == 0:
  19.             pass1 += 1
  20.           elif number % int(nlist[each]) == 0:
  21.             pass1 += 1  
  22.         if pass1 == len(str(number)):        
  23.           nnl.append(number)
  24.     print(nnl)   
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-18 20:21:43 | 显示全部楼层
TJBEST 发表于 2020-3-18 18:42
这个比暴力破解时间的40%左右 速度有点进步,但是代码超机长。累死我了

兄弟,你这个码好像不是太快……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 20:21:43 | 显示全部楼层

我的意思是大数据可能会超时,版主出题要不就是比较难,要不就是简单但要求大数据通过且高效率
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 20:23:55 | 显示全部楼层
fan1993423 发表于 2020-3-18 20:21
我的意思是大数据可能会超时,版主出题要不就是比较难,要不就是简单但要求大数据通过且高效率

其实力扣的测试都比较简单的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 20:27:11 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-3-18 20:23
其实力扣的测试都比较简单的

放心好了,版主一定会哪个大数据来测的,先来小数据看对不对,然后用大数据测时间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 20:31:18 | 显示全部楼层
fan1993423 发表于 2020-3-18 20:27
放心好了,版主一定会哪个大数据来测的,先来小数据看对不对,然后用大数据测时间

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

使用道具 举报

发表于 2020-3-18 20:45:08 | 显示全部楼层
本帖最后由 TJBEST 于 2020-3-18 20:46 编辑
永恒的蓝色梦想 发表于 2020-3-18 20:21
兄弟,你这个码好像不是太快……


我主要练习自己的逻辑性,练习编码。公司项目,一般也不会让你编这个。重在练习。用的时候,直接百度就行,而且用python考虑速度有点本末倒置。c++和c岂不美哉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 20:51:08 | 显示全部楼层
TJBEST 发表于 2020-3-18 20:45
我主要练习自己的逻辑性,练习编码。公司项目,一般也不会让你编这个。重在练习。用的时候,直接百度就 ...

你们公司主要是做哪些项目。对,将效率的确python有先天劣势
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 20:52:22 | 显示全部楼层
TJBEST 发表于 2020-3-18 20:45
我主要练习自己的逻辑性,练习编码。公司项目,一般也不会让你编这个。重在练习。用的时候,直接百度就 ...

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

使用道具 举报

发表于 2020-3-18 20:53:09 | 显示全部楼层
fan1993423 发表于 2020-3-18 20:51
你们公司主要是做哪些项目。对,将效率的确python有先天劣势

我们都是外包,我们只管审查,调试。主要是JAVA。水的一比
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 21:10:15 | 显示全部楼层
fan1993423 发表于 2020-3-18 20:21
我的意思是大数据可能会超时,版主出题要不就是比较难,要不就是简单但要求大数据通过且高效率

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 17:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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