在做“狼抓兔子”的练习题目的时候,发现一个神奇的Place。🤗🤗
费力鼓捣出了代码吧,好像不对,怎么存在永远碰不到的地方!?怀疑代码有事儿,仔细勘察,虽然代码可读性不高,但算法好像真的是那个样子。通过笨办法用笔在纸上一次次模拟查找验证,还直的是,演算到第二十一次——结果正确!🤓🤓(下面贴出我的代码)
练习题目
代码运行效果
最初鼓捣的代码
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
#/sur!bin/nve python
# coding: utf-8
#设置10个围成一圈的兔子窝为数列,想象她首尾相接
rabbit = [0 for i in range(10)]
n = n2 = 10 #n为狼追查次数
step = list(range(n)) #查看兔子窝间隔数
start = 0
k = 0
while n:
rabbit[(start+k)%10] = 1 #标识已找过兔子窝
#print(f'\n\n查兔子窝序号:{(start+k)%10}')
start = start + k + 1 #当前兔子窝占位+1
#print(f'\nstart:{start}\nk:{k}\nn:{n}')
k += 1
n -= 1
#print(f'Start:{start},取10的余:{start%10}\n')
#input(f'\n兔子窝:\n {rabbit}')
input(f'\n狼追查{n2}次后的兔子窝:\n {rabbit}')
勘察错误
代码运行验证效果
查找7次之后就是无谓的循环了,找的都是查过的地方。
哪怕百万次查找,依然动摇不了安全的地方。😋😋
我的感悟:在任何规则下,都有可能存在绝对安全的地方。(The absolute security Place)🧐
python完整代码
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
#/sur!bin/nve python
# coding: utf-8
#优化后的代码
def wolf_scratch_rabbit(n):
'''狼抓兔,n为查窝次数'''
#设置10个围成一圈的兔子窝为数列,想象她首尾相接
rabbit = [0 for i in range(10)]
scratch = 1 #查窝次数初始
count = 1 #遍历兔子窝计数
while True:
rabbit[count%10-1] = 1 #查看过的兔子窝用'1'标识
if scratch==n: #当查窝次数用完,停止查窝
break
count += scratch + 1 #更新计数
#下次查窝间隔即为当前查窝次数,未计入当前窝,所以计数+1
scratch += 1 #查窝次数更新
return rabbit #返回当前兔子窝状况
if __name__=='__main__':
while True:
try:
n = int(input(f'\n\n 查窝次数:')) #查窝次数设置
break
except Exception as error:
input(f'\n\n{" "*16}{"输入错误!"}\n\n{error}')
continue
rabbit = wolf_scratch_rabbit(n)
print(f"\n\n{'﹊'*21}")
print(f'狼找兔子{n}次后的兔子窝状况:\n\n{rabbit}')
print('﹊'*21)
#安全窝打印
print('安全窝位置:')
print(' ', end='')
k = 0
for i in rabbit[:]:
if i==0:
print(k, end=' ')
k += 1
print(f"\n{'﹊'*21}")
我的博文推荐:
推荐条件:
点阅破千
参考文章:
- 小辉_Super《C语言每日一练——第63天:狼追兔子问题》
精品文章:
来源:老齐教室