鱼C论坛

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

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

[复制链接]
发表于 2020-3-6 21:50:07 | 显示全部楼层    本楼为最佳答案   
风魔孤行者 发表于 2020-3-6 21:05
当输入19的时候,转化为二进制是10011,输出应该是3。这种方法把00给忽略了

多谢指正
import re


def f_345(num: int) -> int:

    num_bin_str = str(bin(num))[2:]
    one_group_lst = re.split(r'0.*?', num_bin_str)
    zero_group_lst = re.findall(r'0.*?', num_bin_str)
    max_length = max([len(i) for i in one_group_lst]) + 1
    for i in range(len(zero_group_lst)):
        if zero_group_lst[i] == '0' and i < len(one_group_lst):
            max_length = len(one_group_lst[i]) + len(one_group_lst[i+1]) + 1 if len(one_group_lst[i]) + len(one_group_lst[i+1]) + 1 > max_length else max_length

    return max_length

print(f_345(19))

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-6 22:36:21 | 显示全部楼层
本帖最后由 l0stparadise 于 2020-3-6 22:38 编辑
def f345(num):
    bin_num = bin(num)[2:]
    splt_num=bin_num.split("0")
    if len(splt_num)==1 or max(splt_num[1:])=="":
        return len(splt_num[0])+1
    else:
        ret=""
        ret_list=[]
        for i in range(len(splt_num)-1):
            if splt_num[i] and splt_num[i+1]:
                ret+=splt_num[i]
                ret+=splt_num[i+1]
                ret_list.append(ret)
                ret =""
            else:
                return len(max(splt_num))+1
        return len(max(ret_list))+1

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-6 23:47:33 From FishC Mobile | 显示全部楼层
import re
def fun345():
    num = int(input('num = '))
    str1 = bin(num).split('b')[-1]
    print(str1)
    count,max_count = [],[]
    count_0 = str1.count('0')
    index_0=0
    if str1 == '1':return print(1)
    elif not count_0:return print(str1.count('1'))
    for i in range(count_0):
        str2 = str1[:index_0]+str1[index_0:].replace('0','1',1)
        index_0 = str1[index_0:].index('0')+1+index_0
        list1 = re.findall(r'1+',str2)
        for j in range(len(list1)):
            count.append(list1[j].count('1'))
        max_count.append(max(count))    
    print(max(max_count))

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-7 01:02:29 | 显示全部楼层
本帖最后由 Stubborn 于 2020-3-7 01:39 编辑
def fun_(num):
    def f(s:str):
        st = [len(x) for x in s.split("0") if x]
        return max([a+b for a,b in zip(st,st[1:])])

    string = str(bin(num))[2:]
    result = 0
    st = string.split("00")
    for i in st:
        if "0" not in i:
            result = max(len(i)+1, result)
        else:
            result = max(f(i) + 1, result)
    return result

评分

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

查看全部评分

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

使用道具 举报

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

def change_0_1(num,index_list): # 随机改变一个0为1
    num_0 = '1' + num[1:]
    num_change_list = [num,num_0]
    if '0' in num:
        for i in index_list:
            change_num = num[:i] + '1' + num[(i+1):]
            num_change_list.append(change_num)
    return num_change_list
    
def max_length(num_change_list,nb): # 找到最长的1
    max_num = 0
    final_num = 0
    for num in num_change_list:
        max_list = num.split('0')
        for i in max_list:
            if len(i) > max_num:
                max_num = len(i)
                final_num = num
    print("10进制【%d】改为二进制数字是【%s】" % (nb,bin(nb)[2:]))
    print("最长的一串 1 有【%d】个,这个数字改变后是【%s】" % (max_num,final_num))
    



number = int(input("请输入一个数字:"))
num_to_2 = bin(number)[2:]
ind_list = find_0_index(num_to_2)
n_c_list = change_0_1(num_to_2,ind_list)
max_length(n_c_list,number)

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-7 01:15:09 | 显示全部楼层
def f345(num:int)->int:
    s='0'+bin(num)[2:]
    T=0
    L=[]
    while T<len(s):
        n,m,r=T,0,0
        while n<len(s):
            if s[n]=='1':
                m+=1
                n+=1
            else:
                if r==0:
                    r+=1
                    m+=1
                    n+=1
                else:
                    break
        L.append(m)
        T+=1
    return max(L)
print(f345(1775))
print(f345(7))

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-7 11:13:24 | 显示全部楼层
def fun(x):
    list1=[]
    while x>1:
        yushu=x%2
        list1.append(yushu)
        x=x//2
    if x==0:
        list1.append(0)
    elif x==1:
        list1.append(1)
    list1.reverse()
    list1.insert(0,0)
    jishu=0
    list2=[]
    temp=list1
    for j in range(len(temp)):
        if temp[j]==0:
            temp[j]=1
            for i in temp:
                if i==1:
                    jishu+=1
                else:
                    list2.append(jishu)
                    jishu=0
                list2.append(jishu)
            temp[j]=0
    return(max(list2))

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

        while n & 1:
            a += 1
            n >>= 1
        
        while n:
            n >>= 1
            
            if n & 1:
                b += 1

            else:
                m = max(m, a + b + 1)
                a = b
                b = 0

        return max(m, a + b + 1)

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-7 16:57:06 | 显示全部楼层
本帖最后由 昵称加载错误 于 2020-3-7 17:04 编辑
number = 88488
def jinzhi(num):
        s = []
        while num != 0:
                s.append(str(num%2))
                num //= 2
        s.reverse()
        s.insert(0,'0')
        return s
def count1(hanshu):
        c = 0
        b = []
        for m in hanshu:
                if m =='1':
                        c += 1
                        b.append(c)
                else:
                        c = 0
                b.sort()
        return b[-1]
def change(list):
        w = []
        co = -1
        a = list[:]
        for i in a:        
                co += 1
                if i == '0':
                        a = list[:]
                        a[co] = '1'
                        w.append(count1(a))
        w.sort()
        return w[-1]
print(change(jinzhi(number)))
对不起,楼主,只会暴力解法

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

大佬,你程序好像出错了……
输入0的时候应该输出1,然而你的程序输出了0…
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2020-3-7 22:33:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

解答错误

输入:45725232
输出:6
预期结果:5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:36:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 08:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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