蓝桥杯每日一题(14):武功秘籍(python)

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

猜你喜欢

转载自blog.csdn.net/weixin_50791900/article/details/112911085
今日推荐