今天的编程题,是 农夫杀猪。
农夫把100只猪,编号从1到100,围成一圆圈,自己坐在圆心的转椅上端着AK47,
从一开始数,1,2,3,每次数到3 就开枪打死那只猪,
这样第一个死的,就是3号,第二个就是6号,直到99 号,(而后100号,1号,不杀),进入了
第二圈2号猪被杀,(已经死去的不算,4,5号不杀)7号被杀,,
就是这样,一直下去,最后剩余一个。
questions
1、没死的,这个猪,编号是多少?
2、请用数组或者列表等一维线性表,给出被杀的99头猪的死亡顺序
3、请给出转椅转了多少圈,一圈是360度。
python code
#100 pigs
pig=list(range(1,101))
#print(pig)
#record the dead list
dead=list()
# record How many laps?
lcount=2
while len(pig)>1:
#print(pig)
x1 =pig.pop(0)
pig.append(x1)
x2 =pig.pop(0)
pig.append(x2)
#shoot
killed=pig.pop(0)
dead.append(killed)
#answer 1
print(pig)
#answer 2
print(dead)
# Use monotonic changes, record the number of laps, plus the last lap
kk =dead[0]
for i in dead:
#print(i)
if i<kk:
lcount+=1
kk=i
#answer 3
print('Number of laps ='+str(lcount))
$python main.py
[91]
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 2, 7, 11, 16, 20, 25, 29, 34, 38, 43, 47, 52, 56, 61, 65, 70, 74, 79, 83, 88, 92, 97, 1, 8, 14, 22, 28, 35, 41, 49, 55, 62, 68, 76, 82, 89, 95, 4, 13, 23, 32, 44, 53, 64, 73, 85, 94, 5, 19, 37, 50, 67, 80, 98, 17, 40, 59, 86, 10, 46, 77, 26, 71, 31, 100, 58]
Number of laps =11
注,有一圈空转是,58,91,而后下一圈,58 被杀。
4 ,如果计算枪扫描过的角度,就是(圈数-1)乘以360,而第十一圈其实就转到58的位置,所以,要加上。