1054: 猴子吃桃

使用C++编写程序

题目描述

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

输入

输入一个数n(1<=n<=30)。

输出

输出第一天的桃子个数。

样例输入 Copy

3

样例输出 Copy

10

解题方法

1054: 猴子吃桃_第1张图片
方法一(从前往后推):

	OriNumber = 3 * pow(2, n - 1) - 2;

方法二(用递归的方法):

	int GetOriNum(unsigned i,unsigned n)
	{
		if (i == n)
			return 1;
		else
			return (GetOriNum(i + 1, n) + 1) * 2;
	}

方法三(从后往前推):

	OriNumber = pow(2, n - 1) + pow(2, n) - 2;

方法四(从后往前推,用循环的方法):

	unsigned Number = 1;
	for (int i = 0; i < n - 1; i++)
		Number = (Number + 1) * 2;

程序代码如下

#include
#include
#define ElemType_U unsigned

using namespace std;

template<class ElemType>            //类模板
class PeachProClass
{
public:
	PeachProClass(ElemType n) :Day(n) {};
	void GetOriNum();
	//int GetOriNum(ElemType i);
private:
	ElemType Day;
	ElemType OriNumber;            //第一天吃桃子前(桃子)的个数
};

template<class ElemType>
inline void PeachProClass<ElemType>::GetOriNum()
{
	//方法一
	OriNumber = 3 * pow(2, Day - 1) - 2;

	//方法三
	//OriNumber = pow(2, Day - 1) + pow(2, Day) - 2;

	//方法四
	//unsigned Number = 1;
	//for (int i = 0; i < Day - 1; i++)
		//Number = (Number + 1) * 2;
	//OriNumber = Number;

	cout << OriNumber;
}

/*
//方法二
template
inline int PeachProClass::GetOriNum(ElemType i)
{
	if (i == Day)
		return 1;
	else
		return (GetOriNum(i + 1) + 1) * 2;
}
*/

int main()
{
	unsigned n;
	cin >> n;
	PeachProClass<ElemType_U> PeachProObject(n);
	PeachProObject.GetOriNum();
	//cout << PeachProObject.GetOriNum(1);
	return 0;
}

程序运行结果如下

在这里插入图片描述

你可能感兴趣的:(C++,ZZULIOJ)