Topic:
小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。
他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。
小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走?
Solution_1:
对于仅一个示例可以通过人脑运算输出
但对于多个示例需书写一个算法进行判断
分四种情况进行判断
分别是
首位为奇数末位为奇数
首位为奇数末位为偶数
首位为偶数末位为偶数
首位为偶数末位为奇数
之后对每一种情况进行单独的判断并输出
Code_1:
def pages(b, s):
if b % 2 == 0 and s % 2 == 0:
return (s - b) / 2 + 1
elif b % 2 == 0 and s % 2 != 0:
return (s - b + 1) / 2
elif b % 2 != 0 and s % 2 == 0:
return (s - b + 1) / 2 + 1
elif b % 2 != 0 and s % 2 != 0:
return (s - b) / 2 + 1
print(pages(81, 92))
Solution_2:
同样可以用递归解决本题
犹豫count + 1晚于page + 1
所以当检测page为奇数时count就要 + 1
Code_2:
def pages(page, b, s, count_1, count_2):
if page == s and s % 2 != 0:
return count_1 - count_2
elif page == s and s % 2 == 0:
return count_1 - count_2 + 1
if page == b and page % 2 != 0:
return pages(page + 1, b, s, count_1 + 1, count_1)
elif page == b and page % 2 == 0:
return pages(page + 1, b, s, count_1, count_1)
if page % 2 != 0:
return pages(page + 1, b, s, count_1 + 1, count_2)
elif page % 2 == 0:
return pages(page + 1, b, s, count_1, count_2)
print(pages(0, 1, 12, 0, 0))
Answer:
7