zltzlt 发表于 2020-4-2 13:31:35

kinkon 发表于 2020-4-1 19:27
感觉是有公式的可以知道有多长,没想出来,先解题吧。弄了个被包感觉有点费空间,不过方便查看




28 ms

zltzlt 发表于 2020-4-2 13:31:54

BngThea 发表于 2020-4-1 19:30


输入 n = 30, k = 434991989 超时

fan1993423 发表于 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%2 else '1'
            else:
                result='1' if t%2 else '0'
            n+=1
    return result

776667 发表于 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

快马加鞭未下鞍 发表于 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)

kkk999de 发表于 2020-4-2 17:25:35

本帖最后由 kkk999de 于 2020-4-2 17:29 编辑

终于有一题会的了。虽然写的很渣。def bian(s):
    next = ''
    for i in range(len(s)):
      if s == '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
    except:
      return '不存在'
   

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

zltzlt 发表于 2020-4-2 17:43:34

ouyunfu 发表于 2020-4-1 19:46


输入 n = 30, k = 434991989 超时

zltzlt 发表于 2020-4-2 17:44:35

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

44 ms

zltzlt 发表于 2020-4-2 17:45:04

March2615 发表于 2020-4-1 20:09


56 ms

xiaojiayv234 发表于 2020-4-2 18:18:09

def topic(n,k):
    f=
    if n==1:
      print(f)
    while n>1:
      g=[]
      for i in f:
            if i==0:
                g.extend()
            elif i==1:
                g.extend()
      f=g
      n=n-1
      if n==1:
            print(f)
      
n=int(input('请输入n'))
k=int(input('请输入k'))
topic(n,k)

NAMELESSONE 发表于 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 + string[:count]
      count =count*2
    return string

xiaojiayv234 发表于 2020-4-2 21:19:59

def topic(n,k):
    f=
    if n==1:
      print(f)
    while n>1:
      g=[]
      for i in f:
            if i==0:
                g.extend()
            elif i==1:
                g.extend()
      f=g
      n=n-1
      if n==1:
            print(f)
      
n=int(input('请输入n'))
k=int(input('请输入k'))
topic(n,k)

shatanzongcai 发表于 2020-4-2 21:32:08

没办法提交代码,凑合看下

def py366(n,K):
    if n == 1:
      print(0)
    else:
      a =
      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)

                break
            else:
                pass

whosyourdaddy 发表于 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

Herry2020 发表于 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 == '0':
                                temp += '01'
                        else:
                                temp += '10'
                        m = temp
                i += 1
        return m
n=4
k=5
result = fun366(4)
print(result)
   

山岂乎不在高 发表于 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='01' if s=='0' else '10'
            return ''.join(s)

    for i in range(1,n):
   return p(n)

山岂乎不在高 发表于 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='01' if s=='0' else '10'
            return ''.join(s)

   return p(n)

阴阳神万物主 发表于 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
    l =
    for i in range(1,n):l.extend(re(l))
    return int(l)

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:之前没有调试,函数打错了{:10_277:}
上面是顺推,超时,下面是逆推,极快:
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 < 2 and d:
            flg,k = flg+d,d
      else:
            k //= d
            if d > 1:flg += 1
    return if flg%2 else
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且无需求反。



钙硼钡锗 发表于 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))
n,k=map(int,input().split())
f366(n,k)

zltzlt 发表于 2020-4-4 20:09:21

风魔孤行者 发表于 2020-4-1 20:22


24 ms
页: 1 [2] 3
查看完整版本: Python:每日一题 366