鱼C论坛

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

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

[复制链接]
 楼主| 发表于 2020-4-2 13:31:35 | 显示全部楼层
kinkon 发表于 2020-4-1 19:27
感觉是有公式的可以知道有多长,没想出来,先解题吧。弄了个被包感觉有点费空间,不过方便查看

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

使用道具 举报

 楼主| 发表于 2020-4-2 13:31:54 | 显示全部楼层

输入 n = 30, k = 434991989 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-2 15:44:05 | 显示全部楼层
from math import ceil
def fun366(n,k):
    if n==1:return '0'
    elif n==2 and k==1:return '0'
    elif n==2 and k==2:return '1'
    else:
        a=n
        t=[]
        while n>2:
            t.insert(0,k)
            k=ceil(k/2)
            n-=1
        result=str(k//2)
        while n<a:
            if result=='0':
                result='0' if t[n-2]%2 else '1'
            else:
                result='1' if t[n-2]%2 else '0'
            n+=1
    return result

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-2 16:58:14 | 显示全部楼层
def fun366(n,k):
    x = '0'
    for i in range(n-1):
        x = x.replace('0','a')
        x = x.replace('1','b')
        x = x.replace('a','01')
        x = x.replace('b','10')
    return x[k-1]

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-2 17:06:25 | 显示全部楼层
def amazing(n):
    a=''
    if n==1:
        return '0'
    else:
        b=''
        for i in amazing(n-1):
            if i=='0':
                b+='01'
            else:
                b+='10'
        return b
def mryt366(n,k):
    a=amazing(n)
    print(a[k-1])

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-2 17:25:35 | 显示全部楼层
本帖最后由 kkk999de 于 2020-4-2 17:29 编辑

终于有一题会的了。虽然写的很渣。
def bian(s):
    next = ''
    for i in range(len(s)):
        if s[i] == '0':
            next += '01'
        else:
            next += '10'
    return next


def main(n,k):
    ok = ['0']
    for i in range(n):
        b1 = bian(ok[-1])
        ok.append(b1)
    try:
        return ok[n-1][k-1]
    except:
        return '不存在'
    

if __name__ == '__main__':
    print(main(2,2))

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-4-2 17:43:34 | 显示全部楼层

输入 n = 30, k = 434991989 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-2 17:44:35 | 显示全部楼层
TJBEST 发表于 2020-4-1 20:01
我询问了一下,输出可以是字符串或者是数字。我这里采用字符串的形式。
想法非常简单,没用递归,但是思想 ...

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

使用道具 举报

 楼主| 发表于 2020-4-2 17:45:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-2 18:18:09 | 显示全部楼层
def topic(n,k):
    f=[0]
    if n==1:
        print(f[0])
    while n>1:
        g=[]
        for i in f:
            if i==0:
                g.extend([0,1])
            elif i==1:
                g.extend([1,0])
        f=g
        n=n-1
        if n==1:
            print(f[k-1])
        
n=int(input('请输入n'))
k=int(input('请输入k'))
topic(n,k)

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-2 19:36:09 | 显示全部楼层

.

本帖最后由 NAMELESSONE 于 2020-4-2 19:41 编辑
def solve(n,k):
    if n == 1 and k == 1:
        return '0'
    string='01'
    count=1
    for i in range(n-2):
        string = string + string[count:] + string[:count]
        count =  count*2
    return string[k-1]

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-2 21:19:59 | 显示全部楼层
def topic(n,k):
    f=[0]
    if n==1:
        print(f[0])
    while n>1:
        g=[]
        for i in f:
            if i==0:
                g.extend([0,1])
            elif i==1:
                g.extend([1,0])
        f=g
        n=n-1
        if n==1:
            print(f[k-1])
        
n=int(input('请输入n'))
k=int(input('请输入k'))
topic(n,k)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-2 21:32:08 | 显示全部楼层
没办法提交代码,凑合看下

def py366(n,K):
    if n == 1:
        print(0)
    else:
        a = [0]
        while 1:
            b = []
            for i in a:
                if i == 0:
                    ii = 1
                    b.append(ii)
                else:
                    ii = 0
                    b.append(ii)
            a = a+b
            if len(a) == 2**(n-1):
                print(a[K-1])

                break
            else:
                pass

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-2 22:05:26 | 显示全部楼层
def func366(n,k):
    def inner(n):
        strs = []
        for i in n:
            if i == '0':
                strs.extend('01')
            elif i == '1':
                strs.extend('10')
        return strs
    f = '0'
    count = 0
    while(count<n-1):
        f = inner(f)
        count+=1
    return f[k-1]

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-2 22:14:19 | 显示全部楼层
def fun366(n):
        i = 1
        m = '0'
        while i < n:
                temp = str()
                for j in range(len(m)):
                        if m[j] == '0':
                                temp += '01'
                        else:
                                temp += '10'
                        m = temp
                i += 1
        return m
n=4
k=5
result = fun366(4)
print(result[k-1])
   

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-3 14:10:50 | 显示全部楼层
def p366(n,k):

    def p(n):
        if n==1:
            return '0'
        else:
            s=list(p(n-1))
            for i in range(len(s)):
                s[i]='01' if s[i]=='0' else '10'
            return ''.join(s)

    for i in range(1,n):
     return p(n)[k-1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-3 14:12:14 | 显示全部楼层
def p366(n,k):

    def p(n):
        if n==1:
            return '0'
        else:
            s=list(p(n-1))
            for i in range(len(s)):
                s[i]='01' if s[i]=='0' else '10'
            return ''.join(s)

     return p(n)[k-1]

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-4 10:51:03 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2020-4-4 11:50 编辑

难度评级:普通
要素分析:规律 求反
代码:
def solve(n:int,k:int)->int:
    if n<1 or k<1 or k>2**(n-1):
        raise IndexError('parameter index out of range')
    def re(l):
        return [not i for i in l]
    l = [0]
    for i in range(1,n):l.extend(re(l))
    return int(l[k-1])

if __name__ == '__main__':
    print('示例1 输出:',solve(1,1))
    print('示例2 输出:',solve(2,1))
    print('示例3 输出:',solve(2,2))
    print('示例4 输出:',solve(4,5))
当输入不合法的时候,我抛个异常应该不算错吧?
本来吧,我是想用整数的按位求反~的,但是吧,整数的按位求反的位数是恒定的,于是就会出现对补码的求反,导致结果与预期不同。不晓得有没有能够达到效果的BIF.
ps:之前没有调试,函数打错了
上面是顺推,超时,下面是逆推,极快:
def solve(n:int,k:int)->int:
    if n<1 or k<1 or k>2**(n-1):
        raise IndexError('parameter index out of range')
    flg = 0
    for i in range(n-2,0,-1):
        d = divmod(k,2**i)
        if d[0] < 2 and d[1]:
            flg,k = flg+d[0],d[1]
        else:
            k //= d[0]
            if d[0] > 1:flg += 1
    return [1,0][k-1] if flg%2 else [0,1][k-1]
if __name__ == '__main__':
    print('示例1 输出:',solve(1,1))
    print('示例2 输出:',solve(2,1))
    print('示例3 输出:',solve(2,2))
    print('示例4 输出:',solve(4,5))
每一行对半分,右边是左边的按位取反,而左边正是上一行的内容,在n=2时有且仅有0和1各一个。当n<=2时若k的取值合法,则在第2行的索引就是k-1且无需求反。



评分

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

查看全部评分

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

使用道具 举报

发表于 2020-4-4 11:42:52 | 显示全部楼层
本帖最后由 钙硼钡锗 于 2020-4-4 11:44 编辑
b='0'
def c():
    global b
    a=''
    for i in b:
        if i=='0':
            a+='01'
        if i=='1':
            a+='10'
    b=a
    
def f366(n,k):
    global b
    b='0'
    for i in range(n-1):
        c()
    print(int(b[k-1]))
n,k=map(int,input().split())
f366(n,k)

评分

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

查看全部评分

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 00:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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