链接:ac.nowcoder.com/acm/problem…
来源:牛客网
题目描述
有一个数列
已知
A1=0A_1=0A1=0
A2=1A_2=1A2=1
A3=1A_3=1A3=1
A4=A1+2∗A2+A3A_4=A_1+2*A_2+A_3A4=A1+2∗A2+A3
A5=A2+2∗A3+A4A_5=A_2+2*A_3+A_4A5=A2+2∗A3+A4
......
求AnA_nAn
输入描述:
输入一个整数n (1≤n≤201 \le n \le 201≤n≤20)
输出描述:
输出一个整数
示例1
输入
4
输出
3
规律
前三个数为0 1 1
第四个数等于第一个数+2倍第二个数+第三个数的和,以此类推
代码1
- 用数组实现
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int nums[1000] = {0,1,1};
for(int i = 0;i <= n; ++i){
nums[i+3] = nums[i] + 2 * nums[i+1] + nums[i+2];
}
cout << nums[n-1];
return 0;
}
代码2
- 用vector实现
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> nums = {0,1,1};
for(int i = 0;i <= n; ++i){
nums[i+3] = nums[i] + 2 * nums[i+1] + nums[i+2];
}
cout << nums[n-1];
return 0;
}
代码3
- 用递归实现
#include <bits/stdc++.h>
using namespace std;
int solve(int num){
if(num == 1) return 0;
if(num == 2 || num == 3) return 1;
return solve(num-3) + 2 * solve(num-2) + solve(num-1);
}
int main(){
int n;
cin >> n;
cout << solve(n);
return 0;
}