94 条题解
-
-1
#题解(来自hetao3336374)***
🎉️ 🎉️ 🎉️ 请勿抄袭,违者必究 本人写Python的
思路
- 递归公式
- 观察数列可得,前第一项+前第二项+前第三项=这一项。
- 即为:a[i-1]+a[i-2]+a[i-3]=a[i]
s = [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] n = int(input()) if n > len(s): for i in range(n): x = 0 x = i+i[-1]+i[-2] x.append(s) print(s[x-1]) else: print(s[n-1])
- 递归公式
-
-1
#include <iostream>//我不会告诉你有万能头这东西的 using namespace std; int n; int f(int n) { if (n == 1 || n == 2 || n == 3)//如果n等于1或2或3 { return 1;//返回1 } return f(n - 1) + f(n - 2) + f(n - 3);//递归调用f(n - 1),f(n - 2)和f(n - 3) } int main() { cin >> n; cout << f(n);//调用f(n) return 0; }
已AC请放心食用。
-
-1
题意概括
很简单,输入n并输出数列第n项。
方法
有很多,递推、记忆化搜索、递归等,由于课程教的是递归思想,所以这里选用递归。
思路
递归有两个重点:
-
递归公式
- 观察数列可得,前第一项+前第二项+前第三项=这一项。
- 即为:a[i-1]+a[i-2]+a[i-3]=a[i].
-
递归边界
- 显然,当a<=3时,超出边界,所以如果a<=3,那么直接返回1.
代码+解析
#include <bits/stdc++.h> using namespace std; int n; int f(int n){ if (n<=3) return 1; //递归边界,n<=3时,由题得f(n)=1。 else return f(n-1)+f(n-2)+f(n-3); //递归公式,将f(n)分解为三个更容易得子问题。 } int main() { cin>>n; cout<<f(n); return 0; }
-
-
-1
题解(来自hetao56274)
请勿抄袭,违者必究
-
-1
题解: 这玩意太简单了,规律很容易找到的:
#include using namespace std; int n; int err(int i){ if(i==1 || i==2 || i==3){ return 1; } return err(i-1)+err(i-2)+err(i-3); } int main(){ cin>>n; cout<<err(n); return 0; }
变量名以及函数名可以随便改,终止条件显而易见:因为规律是一个数前三个数的和,第一项第二项第三项都减不够,那既然第一项第二项第三项都知道并且为一,那就判断项数是不是1或2或3,是的话就返回1,下面的就是把规律套里面去。主函数内就直接cin+cout就可以的了,最好再加个“return 0;”。
-
-1
怎么说呢,就一个很简单的递推(学过了递推,谁还用递归呀😕 )下面是代码两件套:#include <bits/stdc++.h> using namespace std; int n,a[35]; int fibonaqi(int n) { a[1]=a[2]=a[3]=1; for (int i=4;i<=n;i++) { a[i]=a[i-3]+a[i-2]+a[i-1]; } return a[n]; } int main() { cin>>n; cout<<fibonaqi(n); return 0; } //伪代码 初始化 定义 n a[35] 定义函数(名字自己取,别抄我的) { 设a数组初始值 for(从a[4]开始,推到a[n]) { 递推公式自己想 } 返回答案a[n] } int main() { 输入n 调用函数 }
信息
- ID
- 5
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 6686
- 已通过
- 2803
- 上传者