您将获得一个仅包含1个字符串的字符串。例如:" 11111111" 你有一个迭代器,当它到达字符串的极端时改变方向。从左到右的方向开始。 迭代器取代了下一个直接的' 1'在它的路径中为零,然后跳到' 1'跟随那个。这种情况一直持续到只有一个' 1'留在字符串中。 你必须打印那个' 1'的位置。
这是一个带有天真解决方案的python 3代码(它还打印了解问题的步骤,尽管预期答案不需要步骤):
n=int(input("enter the number of people in the row : "))
assert(n>=1)
input_string="1"*n
print(input_string)
direction=1
iterator=0
count=0
while(count!=1):
count=0
next_to_delete=-1
while(iterator<len(input_string) and iterator>=0):
if(input_string[iterator]=='1'):
if(next_to_delete==-1):
next_to_delete=iterator
else:
input_string=input_string[:iterator]+"0"+input_string[iterator+1:]
#i.e. input_string[iterator]='0'
next_to_delete=-1
count+=1
iterator+=direction
print(input_string)
direction=1 if direction==-1 else -1
iterator+=direction
print("answer is : ",end='')
print(next_to_delete+1)
示例:
if n=4::::::::::
1111
1010
0010
answer is : 3
if n=5::::::::::
11111
10101
10001
10000
answer is : 1
答案 0 :(得分:0)
这是一个log(n)解决方案:
def survivor_number(n):
if n % 2 == 0:
n -= 1
b = 2
t = 1
while b <= n:
t += b & n
b *= 4
return t
这是基于OEIS中sequence A090569
的算法