解题思路:首先想到的是递归解法,但是运行后发现内存超限了,之后考虑递归优化(包括尾优化,支持的编译器和语言太少,其他优化方法我不会),然后就转到循环,其实一开始觉得可以用循环写,但是又觉得很晦涩,用递归思想思考出解法后,就发现用循环也能写出来了。
注意事项:
参考代码
递归解法:
#include<iostream>
using namespace std;
int x(int u, int y)
{
int z;
z = u + y;
return(z);
}
int f(int n)
{
int c;
if(n==1)
{
return 1;
}
if (n == 2)
{
return 2;
}
if (n == 3)
{
return 3;
}
x(f(n - 1),f(n - 3));
}
int main()
{
int a,t=0, b[20] = {};
for (a = 0; a < 20; a++)
{
cin >> b[a];
t = t + 1;
if (b[a] == 0)
break;
}
for (a = 0; a < t; a++)
{
cout << f(b[a])<<endl;
}
return 0;
}
循环解法:
#include<iostream>
using namespace std;
void f(int n)
{
int i,z[1000] = { 0 };
z[1] = 1;
z[2] = 2;
z[3] = 3;
if(n>3)
{
for (i = 4; i <=n; i++)
{
z[i] = z[i - 1] + z[i - 3];
}
}
cout << z[n] << endl;
}
int main()
{
int i, n=0,z[1000] = { 0 };
for (i = 0; i < 1000; i++)
{
cin >> z[i];
if (z[i] == 0)
break;
n = n + 1;
}
for (i = 0; i < n; i++)
f(z[i]);
return 0;
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复