猴子吃桃原来到底是有1534个桃子还是有3070个桃子?

问题描述:
关于题目的异议,不同题意,答案不同,下面两种说法:
(这道题目的关键就是看清楚第十天到底是怎样的一个情况)

描述一:1534个桃子

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,见只剩下一个桃子了。问最初有多少个桃子。

描述一代码:
递归:

#include <stdio.h>

int peach(int n) {
    if (n == 10) return 1;
    return (peach(n + 1) + 1) * 2;
}

void main() {
    printf("%d", peach(1));
}

循环:

#include <stdio.h>

void main() {
    int i, s = 1;
    for (i = 9; i >= 1; i--) {
        s = (s + 1) * 2;
    }
    printf("%d", s);
}

描述一反推:

1天有1534个桃子,猴子吃了一半多一个后剩余: 766个桃子。
第 2天有 766个桃子,猴子吃了一半多一个后剩余: 382个桃子。
第 3天有 382个桃子,猴子吃了一半多一个后剩余: 190个桃子。
第 4天有 190个桃子,猴子吃了一半多一个后剩余:  94个桃子。
第 5天有  94个桃子,猴子吃了一半多一个后剩余:  46个桃子。
第 6天有  46个桃子,猴子吃了一半多一个后剩余:  22个桃子。
第 7天有  22个桃子,猴子吃了一半多一个后剩余:  10个桃子。
第 8天有  10个桃子,猴子吃了一半多一个后剩余:   4个桃子。
第 9天有   4个桃子,猴子吃了一半多一个后剩余:   1个桃子。
到第10天早上想再吃时,见只剩下1个桃子了。

描述二:3070个桃子

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。第十天同样是吃了前一天的一半加一个,最后剩下一个桃子。问最初有多少个桃子。

描述二代码:
递归:

#include <stdio.h>

int peach(int n) {
    if (n == 11) return 1;
    return (peach(n + 1) + 1) * 2;
}

void main() {
    printf("%d", peach(1));
}

循环:

#include <stdio.h>

void main() {
    int i, s = 1;
    for (i = 10; i >= 1; i--) {
        s = (s + 1) * 2;
    }
    printf("%d", s);
}

描述二反推:

1天有3070个桃子,猴子吃了一半多一个后剩余:1534个桃子。
第 2天有1534个桃子,猴子吃了一半多一个后剩余: 766个桃子。
第 3天有 766个桃子,猴子吃了一半多一个后剩余: 382个桃子。
第 4天有 382个桃子,猴子吃了一半多一个后剩余: 190个桃子。
第 5天有 190个桃子,猴子吃了一半多一个后剩余:  94个桃子。
第 6天有  94个桃子,猴子吃了一半多一个后剩余:  46个桃子。
第 7天有  46个桃子,猴子吃了一半多一个后剩余:  22个桃子。
第 8天有  22个桃子,猴子吃了一半多一个后剩余:  10个桃子。
第 9天有  10个桃子,猴子吃了一半多一个后剩余:   4个桃子。
第10天有   4个桃子,猴子吃了一半多一个后剩余:   1个桃子。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章