#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a = 0, b = 1, c = 1;
if(n == 1){
cout << "0";
return 0;
}
if( n == 2 || n == 3){
cout << "1";
return 0;
}
int sum = 0;
for(int i = 4; i <= n; ++i){
sum = a + 2*b + c;
a = b;
b = c;
c = sum;
}
cout << sum << endl;
}
// 64 位输出请用 printf("%lld") #include <stdio.h>
int solution(int n)
{
if (n < 4)
{
return n == 1 ? 0 : 1;
}
return solution(n - 3) + 2 * solution(n - 2) + solution(n - 1);
}
int main() {
int n = 0;
scanf("%d", &n);
printf("%d", solution(n));
return 0;
} #include <stdio.h>
#include <stdint.h>
#define MAX 20
#define INVALID -1
uint32_t memo[MAX + 1];
uint32_t solution(uint32_t n)
{
if (n < 4)
{
return n == 1 ? 0 : 1;
}
if (memo[n] != INVALID)
{
return memo[n]; // 已经计算过,直接返回
}
memo[n] = solution(n - 3) + 2 * solution(n - 2) + solution(n - 1);
return memo[n];
}
int main() {
uint32_t n = 0;
// 初始化备忘录
for (int i = 0; i <= MAX; i++)
{
memo[i] = INVALID;
}
scanf("%u", &n);
printf("%u", solution(n));
return 0;
}
#include <stdio.h>
#include <stdint.h>
uint32_t solution(uint32_t n)
{
if (n < 4)
{
return n == 1 ? 0 : 1;
}
int cur = 0; // 当前计算出的 An 值
int a1 = 0, a2 = 1, a3 = 1; // a1 到 a3 类比于指针,初始分别指向数列的前 3 项
for (uint32_t i = 4; i <= n; i++)
{
// 计算出当前 An 的值,即 Ai 的值(当 n = i 时,An 的值)
// 此时的 cur 表示着 a4 指针
cur = a1 + 2 * a2 + a3;
// 指针移动
a1 = a2;
a2 = a3;
a3 = cur;
}
return cur;
}
int main() {
uint32_t n = 0;
scanf("%u", &n);
printf("%u", solution(n));
return 0;
} import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(A(n));
}
public static int A(int m){
if(m==1){
return 0;
}
else if(m==2||m==3){
return 1;
}
else{
return A(m-3)+2*A(m-2)+A(m-1);}
}
}