感觉是有公式的可以知道有多长,没想出来,先解题吧。弄了个被包感觉有点费空间,不过方便查看
28 ms BngThea 发表于 2020-4-1 19:30
输入 n = 30, k = 434991989 超时 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 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 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: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)) ouyunfu 发表于 2020-4-1 19:46
输入 n = 30, k = 434991989 超时 TJBEST 发表于 2020-4-1 20:01
我询问了一下,输出可以是字符串或者是数字。我这里采用字符串的形式。
想法非常简单,没用递归,但是思想 ...
44 ms March2615 发表于 2020-4-1 20:09
56 ms 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: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 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)
没办法提交代码,凑合看下
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
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 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)
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)
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 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: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)
风魔孤行者 发表于 2020-4-1 20:22
24 ms