鱼C论坛

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

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

[复制链接]
发表于 2020-3-6 21:50:32 | 显示全部楼层
  1. def func(num):
  2.     str1 = '0' + bin(num)[2:]
  3.     list1 = str1.split('0')
  4.     length = 0
  5.     for i in range(len(list1) - 1):
  6.         length = max(length, len(list1[i]) + len(list1[i + 1]) + 1)
  7.     return length
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 22:36:21 | 显示全部楼层
本帖最后由 l0stparadise 于 2020-3-6 22:38 编辑
  1. def f345(num):
  2.     bin_num = bin(num)[2:]
  3.     splt_num=bin_num.split("0")
  4.     if len(splt_num)==1 or max(splt_num[1:])=="":
  5.         return len(splt_num[0])+1
  6.     else:
  7.         ret=""
  8.         ret_list=[]
  9.         for i in range(len(splt_num)-1):
  10.             if splt_num[i] and splt_num[i+1]:
  11.                 ret+=splt_num[i]
  12.                 ret+=splt_num[i+1]
  13.                 ret_list.append(ret)
  14.                 ret =""
  15.             else:
  16.                 return len(max(splt_num))+1
  17.         return len(max(ret_list))+1
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 23:47:33 From FishC Mobile | 显示全部楼层
  1. import re
  2. def fun345():
  3.     num = int(input('num = '))
  4.     str1 = bin(num).split('b')[-1]
  5.     print(str1)
  6.     count,max_count = [],[]
  7.     count_0 = str1.count('0')
  8.     index_0=0
  9.     if str1 == '1':return print(1)
  10.     elif not count_0:return print(str1.count('1'))
  11.     for i in range(count_0):
  12.         str2 = str1[:index_0]+str1[index_0:].replace('0','1',1)
  13.         index_0 = str1[index_0:].index('0')+1+index_0
  14.         list1 = re.findall(r'1+',str2)
  15.         for j in range(len(list1)):
  16.             count.append(list1[j].count('1'))
  17.         max_count.append(max(count))   
  18.     print(max(max_count))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 23:55:09 | 显示全部楼层
本帖最后由 Windypper 于 2020-3-6 23:57 编辑
  1. def f345(num):
  2.     bin_num = '0'+bin(num)[2:]
  3.     one_list = bin_num.split('0')
  4.     greatest = 0
  5.     for i in range(len(one_list[:-1])):
  6.         greatest = max(greatest, len(one_list[i]) + len(one_list[i + 1]))
  7.     return greatest+1
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 01:02:29 | 显示全部楼层
本帖最后由 Stubborn 于 2020-3-7 01:39 编辑

  1. def fun_(num):
  2.     def f(s:str):
  3.         st = [len(x) for x in s.split("0") if x]
  4.         return max([a+b for a,b in zip(st,st[1:])])

  5.     string = str(bin(num))[2:]
  6.     result = 0
  7.     st = string.split("00")
  8.     for i in st:
  9.         if "0" not in i:
  10.             result = max(len(i)+1, result)
  11.         else:
  12.             result = max(f(i) + 1, result)
  13.     return result
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 01:08:03 | 显示全部楼层
  1. def find_0_index(num): # 找到所有0的序号
  2.     index_list = []
  3.     for i in range(1,len(num)):
  4.         if num[i] == '0':
  5.             index_list.append(i)
  6.     return index_list

  7. def change_0_1(num,index_list): # 随机改变一个0为1
  8.     num_0 = '1' + num[1:]
  9.     num_change_list = [num,num_0]
  10.     if '0' in num:
  11.         for i in index_list:
  12.             change_num = num[:i] + '1' + num[(i+1):]
  13.             num_change_list.append(change_num)
  14.     return num_change_list
  15.    
  16. def max_length(num_change_list,nb): # 找到最长的1
  17.     max_num = 0
  18.     final_num = 0
  19.     for num in num_change_list:
  20.         max_list = num.split('0')
  21.         for i in max_list:
  22.             if len(i) > max_num:
  23.                 max_num = len(i)
  24.                 final_num = num
  25.     print("10进制【%d】改为二进制数字是【%s】" % (nb,bin(nb)[2:]))
  26.     print("最长的一串 1 有【%d】个,这个数字改变后是【%s】" % (max_num,final_num))
  27.    



  28. number = int(input("请输入一个数字:"))
  29. num_to_2 = bin(number)[2:]
  30. ind_list = find_0_index(num_to_2)
  31. n_c_list = change_0_1(num_to_2,ind_list)
  32. max_length(n_c_list,number)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 01:15:09 | 显示全部楼层
  1. def f345(num:int)->int:
  2.     s='0'+bin(num)[2:]
  3.     T=0
  4.     L=[]
  5.     while T<len(s):
  6.         n,m,r=T,0,0
  7.         while n<len(s):
  8.             if s[n]=='1':
  9.                 m+=1
  10.                 n+=1
  11.             else:
  12.                 if r==0:
  13.                     r+=1
  14.                     m+=1
  15.                     n+=1
  16.                 else:
  17.                     break
  18.         L.append(m)
  19.         T+=1
  20.     return max(L)
  21. print(f345(1775))
  22. print(f345(7))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 01:29:33 | 显示全部楼层
本帖最后由 Python3005 于 2020-3-7 01:41 编辑
  1. import re
  2. def fun(num):
  3.         s = '0' + bin(num)[2:]
  4.         temp = max(s.split('0'), key = lambda x : len(x))
  5.         index = re.search(rf'0?{temp}0?', s).span()[0]
  6.         s_new = s[:index] + '1' + s[index+1:]
  7.         return len(max(s_new.split('0'), key = lambda x : len(x)))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 11:13:24 | 显示全部楼层
  1. def fun(x):
  2.     list1=[]
  3.     while x>1:
  4.         yushu=x%2
  5.         list1.append(yushu)
  6.         x=x//2
  7.     if x==0:
  8.         list1.append(0)
  9.     elif x==1:
  10.         list1.append(1)
  11.     list1.reverse()
  12.     list1.insert(0,0)
  13.     jishu=0
  14.     list2=[]
  15.     temp=list1
  16.     for j in range(len(temp)):
  17.         if temp[j]==0:
  18.             temp[j]=1
  19.             for i in temp:
  20.                 if i==1:
  21.                     jishu+=1
  22.                 else:
  23.                     list2.append(jishu)
  24.                     jishu=0
  25.                 list2.append(jishu)
  26.             temp[j]=0
  27.     return(max(list2))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 12:14:29 | 显示全部楼层
  1. def an(num):
  2.     s=(bin(num))[2:-1]
  3.     s=s.split('0')
  4.     res=[]
  5.     if s[-2]=='':
  6.         res.append(len(s[-1])+1)
  7.     for i in range(len(s)-1):
  8.         if s[i+1]=='':
  9.             res.append(len(s[i])+1)
  10.         res.append(len(s[i])+len(s[i+1])+1)
  11.     return max(res)  
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 16:07:35 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-3-12 09:32 编辑
  1. class Solution:
  2.     def reverseBits(self, n: int) -> int:
  3.         a = b = m = 0

  4.         while n & 1:
  5.             a += 1
  6.             n >>= 1
  7.         
  8.         while n:
  9.             n >>= 1
  10.             
  11.             if n & 1:
  12.                 b += 1

  13.             else:
  14.                 m = max(m, a + b + 1)
  15.                 a = b
  16.                 b = 0

  17.         return max(m, a + b + 1)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 16:57:06 | 显示全部楼层
本帖最后由 昵称加载错误 于 2020-3-7 17:04 编辑
  1. number = 88488
  2. def jinzhi(num):
  3.         s = []
  4.         while num != 0:
  5.                 s.append(str(num%2))
  6.                 num //= 2
  7.         s.reverse()
  8.         s.insert(0,'0')
  9.         return s
  10. def count1(hanshu):
  11.         c = 0
  12.         b = []
  13.         for m in hanshu:
  14.                 if m =='1':
  15.                         c += 1
  16.                         b.append(c)
  17.                 else:
  18.                         c = 0
  19.                 b.sort()
  20.         return b[-1]
  21. def change(list):
  22.         w = []
  23.         co = -1
  24.         a = list[:]
  25.         for i in a:       
  26.                 co += 1
  27.                 if i == '0':
  28.                         a = list[:]
  29.                         a[co] = '1'
  30.                         w.append(count1(a))
  31.         w.sort()
  32.         return w[-1]
  33. print(change(jinzhi(number)))
复制代码

对不起,楼主,只会暴力解法

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 17:06:23 | 显示全部楼层
本帖最后由 kinkon 于 2020-3-8 01:29 编辑
  1. def f345(num):
  2.     s = '0' + bin(num)[2:] + '00'
  3.     cout = 0
  4.     for i in range(len(s) - 1):
  5.             js = s[i:].find('0') + 1                  
  6.             if s[i + 1 : i + js] == '00' and js > cout:
  7.                 cout = max(cout, js)
  8.             else:
  9.                 js1 = s[i + js:].find('0') + js
  10.                 if js1 > cout:
  11.                     cout = max(cout, js1)
  12.                 else:
  13.                     pass
  14.     return cout
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 19:09:41 | 显示全部楼层

大佬,你程序好像出错了……
输入0的时候应该输出1,然而你的程序输出了0…
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 19:42:19 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-3-7 19:09
大佬,你程序好像出错了……
输入0的时候应该输出1,然而你的程序输出了0…

恩,好的,,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:33:21 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:34:18 | 显示全部楼层
SHRS23 发表于 2020-3-6 20:18
请版主帮忙测试

24 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:36:34 | 显示全部楼层

解答错误

输入:45725232
输出:6
预期结果:5
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:36:52 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:37:12 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 18:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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