李巨帅


私信TA

用户名:168888

访问量:8161

签 名:

快乐每一天!

等  级
排  名 1527
经  验 2808
参赛次数 0
文章发表 18
年  龄 0
在职情况 学生
学  校 武汉软件
专  业

  自我简介:

解题思路: 类似与这种题的思路都是先列举,找出当前项与前N项的关系,得到递推关系式

不过本题有一个有意思的地方,不知道大家注意到没有,就是示例的输入与输出是分开的,所以说这是本题的bug!

可能大家也考虑到了这个问题,但又莫名其妙的过了,就没有继续深究了,那么,下面我来为大家提供一种可以无限

输入,输入与输出分开的一种方式。代码仅供参考!如有不足,还望不吝赐教。


原理图.png

注意事项: 本题直接用递归会时间超限,以下分别给出错误代码和通过代码截图,通过代码会给在参考代码处:

错误代码:

小母牛错误代码.png

通过代码:

母牛正确代码.png

参考代码: 

#include<iostream>
using namespace std;
int main(void)
{
	int maxSize = 10;
	int N;
	int *p = new int[maxSize];
	int len = 0;
	int cowNumber[56] = { 0,1,2,3 };
	ios::sync_with_stdio(false);//解决缓冲问题提高速度
	for (int i = 4; i <= 55; i++)
		cowNumber[i] = cowNumber[i - 1] + cowNumber[i - 3];
	//输入操作
	while (cin >> N && N != 0)
	{
		if (len >= maxSize)
		{
			int *tempBuff = new int[maxSize];
			maxSize = maxSize + ((maxSize >> 1) > 1 ? (maxSize >> 1) : 1);
			for (size_t i = 0; i < len; i++)
				tempBuff[i] = p[i];
			if (p)
				delete[] p;
			p = tempBuff;
		}
		p[len++] = cowNumber[N];
	}
	//输出操作
	for (int i = 0; i < len; i++)cout << p[i] << endl;
}

ps:如果您仅想通过本平台测试,可以考虑下以下代码:

/*#不分开输出代码*/
#include<iostream>
#define maxSize 56
using namespace std;
int main(void)
{
	int N;
	int cowNumber[56] = { 0,1,2,3 };
	for (int i = 4; i <= 55; i++)
		cowNumber[i] = cowNumber[i - 1] + cowNumber[i - 3];
	while (cin >> N && N != 0)
		cout << cowNumber[N] << endl;
}
/*#分开输出代码*/
#include<iostream>
#define maxSize 56
using namespace std;

int main(void)
{

	int N;
	int p[maxSize];
	int len = 0;
	int cowNumber[56] = { 0,1,2,3 };
	ios::sync_with_stdio(false);//解决缓冲问题提高速度
	for (int i = 4; i <= 55; i++)
		cowNumber[i] = cowNumber[i - 1] + cowNumber[i - 3];
	//输入操作
	while (cin >> N && N != 0)
	{
		p[len++] = cowNumber[N];
	}
	//输出操作
	for (int i = 0; i < len; i++)cout << p[i] << endl;
}

如果觉得对您有帮助,请给我一个五星好评呗!

 

0.0分

3 人评分

  评论区

  • «
  • »