2013 蟠桃记

题目

来源:http://acm.hdu.edu.cn/showproblem.php?pid=2013

第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?

常规解法

while (scanf("%d", &n) != EOF){
	int r = 1;
	for (int i = 2; i <= n; i++)
		r = (r + 1) * 2;
	printf("%d\n", r);
}

高端写法

while (scanf("%d", &n) != EOF)
	printf("%.0f\n", 3 * pow(2, n - 1) - 2);

从数学的角度思考这个题

本题很容易得到它的递推方程

f ( 1 ) = 1 f(1) = 1 f(1)=1

f ( n ) = [ f ( n − 1 ) + 1 ] × 2 f(n) = [f(n-1) + 1] \times 2 f(n)=[f(n1)+1]×2

于是我们得到 f ( n ) + 2 = 2 × [ f ( n − 1 ) + 2 ] f(n) + 2 = 2 \times [f(n-1) + 2] f(n)+2=2×[f(n1)+2]

由于 f ( 1 ) + 2 = 3 f(1) + 2 = 3 f(1)+2=3

推导得 f ( n ) + 2 = 3 × 2 n − 1 f(n) + 2 = 3 \times 2^{n-1} f(n)+2=3×2n1

进一步整理得 f ( n ) = 3 × 2 n − 1 − 2 f(n) = 3 \times 2^{n-1} - 2 f(n)=3×2n12

另一种方法

f ( 1 ) = 1 f(1) = 1 f(1)=1
f ( n ) = 2 f ( n − 1 ) + 2 = f ( n − 1 ) + 2 f ( n − 2 ) + 4 f(n) = 2f(n-1) + 2 = f(n-1) + 2f(n-2) + 4 f(n)=2f(n1)+2=f(n1)+2f(n2)+4

⇒ f ( n ) + f ( n − 1 ) + 4 = 2 × [ f ( n − 1 ) + f ( n − 2 ) + 4 ] \Rightarrow f(n) + f(n-1) + 4 = 2 \times [f(n-1) + f(n-2) + 4] f(n)+f(n1)+4=2×[f(n1)+f(n2)+4]

g ( n ) = f ( n ) + f ( n − 1 ) + 4 g(n) = f(n) + f(n-1) + 4 g(n)=f(n)+f(n1)+4

g ( n ) = 2 × g ( n − 1 ) g(n) = 2 \times g(n-1) g(n)=2×g(n1)
g ( 2 ) = f ( 2 ) + f ( 1 ) + 4 = 9 g(2) = f(2) + f(1) + 4 = 9 g(2)=f(2)+f(1)+4=9

∴ g ( n ) = 9 × 2 n − 2 ( n > 1 ) \therefore g(n) = 9 \times 2^{n-2} \quad (n > 1) g(n)=9×2n2(n>1)

∴ f ( n ) + f ( n − 1 ) = 9 × 2 n − 2 − 4 ① \therefore f(n) + f(n-1) = 9 \times 2^{n-2} - 4 \quad ① f(n)+f(n1)=9×2n24
f ( n − 1 ) + f ( n − 2 ) = 9 × 2 n − 3 − 4 ② f(n-1) + f(n-2) = 9 \times 2^{n-3} - 4 \quad ② f(n1)+f(n2)=9×2n34
⋮ \vdots
f ( 3 ) + f ( 2 ) = 9 × 2 − 4 f(3) + f(2) = 9 \times 2 - 4 f(3)+f(2)=9×24
f ( 2 ) + f ( 1 ) = 9 − 4 f(2) + f(1) = 9 - 4 f(2)+f(1)=94

把①式减去②式得
f ( n ) = 9 × 2 n − 3 + f ( n − 2 ) f(n) = 9 \times 2^{n-3} + f(n-2) f(n)=9×2n3+f(n2)
f ( n − 2 ) = 9 × 2 n − 5 + f ( n − 4 ) f(n-2) = 9 \times 2^{n-5} + f(n-4) f(n2)=9×2n5+f(n4)
⋮ \vdots

这时候,我们需要分类讨论了。

当 n 为奇数时

f ( n ) = 9 × 2 n − 3 + f ( n − 2 ) f(n) = 9 \times 2^{n-3} + f(n-2) f(n)=9×2n3+f(n2)
f ( n − 2 ) = 9 × 2 n − 5 + f ( n − 4 ) f(n-2) = 9 \times 2^{n-5} + f(n-4) f(n2)=9×2n5+f(n4)
⋮ \vdots
f ( 5 ) = 9 × 2 2 + f ( 3 ) f(5) = 9 \times 2^2 + f(3) f(5)=9×22+f(3)
f ( 3 ) = 9 + f ( 1 ) f(3) = 9 + f(1) f(3)=9+f(1)
f ( 1 ) = 1 f(1) = 1 f(1)=1

从下往上迭代,得:

f ( n ) = 9 × ( 2 n − 3 + 2 n − 5 + … + 2 2 + 1 ) + 1 f(n) = 9 \times (2^{n-3} + 2^{n-5} + \ldots + 2^2 + 1) + 1 f(n)=9×(2n3+2n5++22+1)+1
⇒ f ( n ) = 9 × 1 − 4 ( n − 1 ) / 2 1 − 4 + 1 \Rightarrow f(n) = 9 \times \frac{1 - 4^{(n-1)/2}}{1 - 4} + 1 f(n)=9×1414(n1)/2+1
⇒ f ( n ) = 3 × 2 n − 1 − 2 \Rightarrow f(n) = 3 \times 2^{n - 1} - 2 f(n)=3×2n12

当 n 为偶数

f ( n ) = 9 × 2 n − 3 + f ( n − 2 ) f(n) = 9 \times 2^{n-3} + f(n-2) f(n)=9×2n3+f(n2)
f ( n − 2 ) = 9 × 2 n − 5 + f ( n − 4 ) f(n-2) = 9 \times 2^{n-5} + f(n-4) f(n2)=9×2n5+f(n4)
⋮ \vdots
f ( 4 ) = 9 × 2 1 + f ( 2 ) f(4) = 9 \times 2^1 + f(2) f(4)=9×21+f(2)
f ( 2 ) = 4 f(2) = 4 f(2)=4

从下往上迭代,得:

f ( n ) = 9 × ( 2 n − 3 + 2 n − 5 + … + 2 1 ) + 4 f(n) = 9 \times (2^{n-3} + 2^{n-5} + \ldots + 2^1) + 4 f(n)=9×(2n3+2n5++21)+4
⇒ f ( n ) = 9 × 2 × 1 − 4 ( n − 2 ) / 2 1 − 4 + 4 \Rightarrow f(n) = 9 \times 2 \times \frac{1 - 4^{(n-2)/2}}{1 - 4} + 4 f(n)=9×2×1414(n2)/2+4
⇒ f ( n ) = 3 × 2 n − 1 − 2 \Rightarrow f(n) = 3 \times 2^{n - 1} - 2 f(n)=3×2n12

世上的事往往如此,巧合的事情经常发生。不得不感叹大自然的美妙~

现在我们就得到了这道题目的公式了 f ( n ) = 3 × 2 n − 1 − 2 f(n) = 3 \times 2^{n - 1} - 2 f(n)=3×2n12

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值