問題描述:
關於題目的異議,不同題意,答案不同,下面兩種說法:
(這道題目的關鍵就是看清楚第十天到底是怎樣的一個情況)
描述一: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個桃子。