13 条题解
-
18
#include <iostream> using namespace std; int a(int n) { if(n == 1 || n == 2 || n ==3) { return 1; } else { return a(n - 1) + a(n - 2) + a(n - 3); } } int main() { int n; cin >> n; cout << a(n); return 0; }
解析:
1.咱先定义函数,函数要先判断参数是否为第 1 、2 、 3 项如果是则直接返回 1 。
2.如果不是前三项,就返回要求的那一项的前三项之和。(不用再管其他的了,函数会自己递归的。)
3.再把主函数写好,定义变量、接收数据、调用函数、输出、结束 mian 函数。 看看这么可爱的温迪,一定要点赞啊!👍
-
4
解析
根据数的排列可以看出,这组数连续的3个数相加,等于第4个数。
因此,写出递归公式
f(n) = f(n - 1) + f(n - 2) + f(n - 3)
边界条件为
f(1) = 1, f(2) = 1, f(3) = 1
题解
#include <iostream> using namespace std; int f(int n) { if(n == 1 || n == 2 || n ==3) return 1; else return f(n - 1) + f(n - 2) + f(n - 3); } int main() { int n; cin >> n; cout << f(n); return 0; }
-
1
#include <bits/stdc++.h> using namespace std; int n,sum,a[35]={1,1,1,1}; int main() { cin>>n; for(int i=4;i<=n;i++){ a[i]=a[i-1]+a[i-2]+a[i-3]; } cout<<a[n]; }
#include <bits/stdc++.h>
: 同上,包含了一个非标准的头文件,它包含了C++标准库的大部分头文件。using namespace std;
: 使用std
命名空间,使得可以直接使用如cin
、cout
等标准库中的对象而无需前缀std::
。int n,sum,a[35]={1,1,1,1};
: 声明了三个变量。n
是用户输入的项数,sum
(尽管在这段代码中未使用)可能是一个用于计算的临时变量,a
是一个大小为35的整数数组,初始化为前四项都为1。这个数组用于存储数列的值。int main()
: 主函数的开始。{
: 主函数的开始括号。cin>>n;
: 从标准输入读取一个整数,并赋值给变量n
。for(int i=4;i<=n;i++){
: 一个for循环,从第4项开始,一直到第n
项。a[i]=a[i-1]+a[i-2]+a[i-3];
: 这是四阶斐波那契数列的定义。数组的第i
项(从1开始计数)是前三个项的和。}
: for循环的结束括号。cout<<a[n];
: 输出数组的第n
项的值。
-
1
找规律并求出数列第n项。
规律:数列的每一项都是该项的前三项之和(除了前三项)。
用数组
a
存储数列,将第一,二,三项初始化为1
,根据规律有a[i]=a[i-1]+a[i-2]+a[i-3]
,用循环递推出数列即可。 这样可以提高效率,如果用递归的话会重复调用函数,每次都要重新算一遍。#include<iostream> using namespace std; int n,a[33]={1,1,1,1};//定义数组并初始化前三项为 1 int main(){ cin>>n;//输入 for(int i=4;i<=n;i++){ a[i]=a[i-1]+a[i-2]+a[i-3];//根据规律从第四项开始递推至第n项 }cout<<a[n];//输出 return 0; }
n≤30,数字这么小担心什么,直接用递归不好吗本题用递归也可以,思路一样,代码如下#include<bits/stdc++.h> using namespace std; int n; int line(int n){ if(n<4)return 1;//边界条件 return line(n-1)+line(n-2)+line(n-3);//按规律递归 } int main(){ cin>>n;//输入 cout<<line(n);//调用函数并输出 return 0; }
-
0
俗话说得好“打表过样例,暴力出奇迹“
#include <bits/stdc++.h> using namespace std; int a[31] = {1,1,1,3,5,9,17,31,57,105,193,355,653,1201,2209,4063,7473,13745,25281,46499,85525,157305,289329,532159,978793,1800281,3311233,6090307,11201821,20603361}; int main() { int n; cin >> n; cout << a[n - 1]; return 0; }
-
0
hello(>v<):
先点"亿"赞,后欣赏 ~全篇重点~
审题(斐波那契数列
升级版👀️ !!!):
输入 n,表示数列的第n项,
输出 数列第n项的值。
很简单(so (⊙o⊙)…easy),用递归解决! 定义pl函数,排列拼音的简称(pai lie)。
边界-pl(1)== pl(2)== pl(3) == 1
公式-pl(n) = pl(n - 1)+pl(n - 2)+pl(n - 3)
#include <iostream> using namespace std; int pl(int n) { if(n == 1 || n == 2 || n ==3) return 1; else return pl(n - 1) + pl(n - 2) + pl(n - 3); } int main() { int n; cin >> n; cout << pl(n); return 0; }
-
0
又来写题解
先点赞,后观看
全篇重点审题(斐波那契升级版):
输入 n,表示数列第n项
输出 数列第n项的值
很简单,用递归解决
边界-fib(1) = 1,fib(2) = 1,fib(3) = 1
公式-fib(n) = fib(n - 1)+fib(n - 2)+fib(n - 3)
所以,代码:
略
……………………
开个玩笑
代码如下
#include <bits/stdc++.h> using namespace std; int fib(int n) { if (n <= 3) return 1; return fib(n - 1) + fib(n - 2) + fib(n - 3); } int main() { int n; cin >> n; cout << fib(n); return 0; } //看完别复制 //你看懂了吗 //没看懂continue(再看一遍) //看懂了自己敲,反正又不长 //(包括空行17行) //陈哲宇 2023 07 22
-
0
斐波那契数列变式
用benben列表记录 有效节省内存 防止题目限制
#include <iostream> using namespace std; int benben[30]; int fib(int n) { if (benben[n] != -1) return benben[n]; if(n == 1){ benben[n] = 1; }else if(n == 2){ benben[n] = 1; }else if(n == 3){ benben[n] = 1; }else{ benben[n] = fib(n - 1) + fib(n - 2) + fib(n - 3); } return benben[n]; } int main() { for (int i = 0; i < 30; i++) benben[i] = -1; int n; cin >> n; cout << fib(n) << endl; return 0; }
这么好的方法快点个赞!!!👍 ❤️ -
0
通过题目给的数据得出边界条件为: f(1) = 1
f(2) = 1
f(3) = 1
递归式为:
f(n) = f(n - 1) + f(n - 2) + f(n - 3)
整合亿下,加上一些基本的东西,就成答案了
#include <iostream> using namespace std; int f(int n) { if(n == 1 || n == 2 || n == 3) return 1; else return f(n - 1) + f(n - 2) + f(n - 3); } int main() { int n; cin >> n; cout << f(n); return 0; }
- 1
信息
- ID
- 312
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 899
- 已通过
- 544
- 上传者