Go: package main

import (
	"bufio"
		"os"
	"strconv"
	"fmt"
)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	dp := make([]int , 30)
	dp[0] = 1 // 1段の階段の登り方
	dp[1] = 2 // 2段の階段の登り方
	dp[2] = 4 // 3段の階段の登り方
	for i := 3; i < 30; i++ {
		// n段の階段の登り方は
		// n-1段の階段の登り方+n-2段の階段の登り方+n-3段の階段の登り方
		dp[i] = dp[i-1]+dp[i-2]+dp[i-3] 
	}
	for scanner.Scan() {
		n, _ := strconv.Atoi(scanner.Text())
		if n == 0 {
			break
		}
		fmt.Println(((dp[n-1]+9)/10+364)/365)
	}
}

C++: #include <iostream>
using namespace std;

int num(int n);

int main(){
  int n;
  cin>>n;
  cout << num(n)/3650 + 1<<endl;
}

int num(int n){
    switch (n)
    {
        case 1: return 1;
        case 2:  return 2;
        case 3:  return 4;
    }
  return num(n-1)+num(n-2)+num(n-3);
}

C++: #include<iostream>

int main(void){
    int n;
    int a[31]={};
    a[0]=1;
    a[1]=1;
    a[2]=2;
    for(int i=3;i<31;i++){
        a[i]=a[i-1]+a[i-2]+a[i-3];
    }
    while(std::cin>>n){
        if(n==0) break;
        std::cout<<a[i]/3650+1<<std::endl;
    }
    return 0;
}

C++: #include<stdio.h>
#include<stdlib.h>
#include<string.h>

int Count(int num) {
	if (num == 1) return 1;
	else if (num == 2) return 2;
	else if (num == 3) return 4;
	else return Count(num - 1) + Count(num - 2) + Count(num - 3);
}



int main() {
	int num;
	while (1) {
		scanf("%d", &num);
		if (num == 0)break;
		printf("%d\n", (Count(num)/10)/365 + 1);
	}
	return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;

int main() {
	vector<int> ans;
	int now=0,ans_now=0;
	vector<int> dp(35);
	int tmp,tmp1,tmp2;
	int a[31];

	//入力
	dp[0] = 1;dp[1] = 1;dp[2] = 2;
	a[0] = a[1] = a[2] = 1;
	for (int i = 3; i <= 33; i++) {
		dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
		//cout <<i<< dp[i-1] <<" "<< dp[i - 2] << " "<< dp[i - 3] << " "<< " c" << endl;
		 //cout << dp[tmp]<<" a"<<endl;
		 //何年かかるか
		tmp1 = dp[i] % 3650;
		tmp2 = dp[i] / 3650;
		if (tmp1 != 0) {
			tmp2++;
		}
		ans.push_back(tmp2);
	}
	cin >> tmp;
	int i = 3;
	 do{
		a[i] = ans[tmp];
		 cin >> tmp;
		 i++;
	 } while (tmp!=0);
	for (int j = 0; j < 30; j++) {
		cout << a[j]<<endl;

	}

	return 0;
}

C++: #include<iostream>

using namespace std;

int dp[35];

int main(){
	dp[0]=1;
	dp[1]=1;
	dp[2]=2;
	for(int i=3;i<31;i++){
		dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
	}
	
	int n;
	while(cin>>n && n){
		cout<<dp[n]/3650+(dp[n]%3650!=0)<<endl;
	}
}

C++: #include<iostream>
#include<algorithm>
using namespace std;

int memo[100000];

int solve(int n){

  if(memo[n] > 0) return memo[n];

  if(n == 0) return 1;
  if(n == 1) return 1;
  if(n == 2) return 2;
 
  return memo[n] = solve(n - 1) + solve(n - 2) + solve(n - 3);
}

int main(){

  unsigned long long int n,a;

  while(cin >> n, n){

    a = solve(n);

    if(a % 3650 > 0) cout << a/3650+1 << endl;
    else cout << a/3650 << endl;
  }
}

C++: #include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for (int (i)=(0);(i)<(int)(n);++(i))
using ll = long long;
using P = pair<ll, ll>;
template<class T> inline bool chmax(T& a, T b) {if (a < b){a = b;return 1;}return 0;}
template<class T> inline bool chmin(T& a, T b) {if (a > b){a = b;return 1;}return 0;}
const long long LLINF = 1LL << 60;
using namespace std;

ll dp[50];

int main()
{
    int n;
    while (cin >> n and n)
    {
        fill(dp, dp+n, 0);

        dp[0] = dp[1] = dp[2] = 1;
        for (int i=0; i<n; ++i)
        {
            dp[i+1] += dp[i];
            dp[i+2] += dp[i];
            dp[i+3] += dp[i];
        }

        dp[n-1] = dp[n-1]/10 + bool(dp[n-1]%10);
        cout << dp[n-1]/365 + bool(dp[n-1]%365) << endl;
    }
}

C++: #include<iostream>

using namespace std;

int func(int x);

int main() {
	int x;

	cin >> x;

	cout << func(x) / 3650 + 1;
	
	return 0;
}

int func(int x) {
	if (x == 1) {
		return 1;
	}
	else if (x == 2) {
		return 2;
	}
	else if (x == 3) {
		return 4;
	}
	else {
		return func(x - 1) + func(x - 2) + func(x - 3);
	}
}

C++: #include <iostream>
using namespace std;

int main(){
  int n;
  int a[31]={};
  a[0]=1; a[1]=1; a[2]=2;
  for(int i=3;i<=30;i++) a[i]=a[i-3]+a[i-2]+a[i+1];
  
  while(cin >> n && n>0){
    cout << (a[n]+3599)/3600 << endl;
  }
}

C++: #include <iostream>
using namespace std;
int main(){
	int d[35]={0};
	d[0]=1;
	for(int i=0;i<30;i++)for(int j=1;j<=3;j++)d[i+j]+=d[i];
	while(cin>>d[33],d[33])cout<<(d[d[33]]+3649)/3650<<endl;
	return 0;
}

C++: #include <iostream>
#include <cstdio>
#include <cassert>
#include <cstring>
#include <vector>
#include <valarray>
#include <array>
#include <queue>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <complex>
#include <random>

using namespace std;
using ll = long long;
using ull = unsigned long long;
constexpr int TEN(int n) {return (n==0)?1:10*TEN(n-1);}


int main() {
    ll fib[31];
    fib[1] = 1;
    fib[2] = 2;
    fib[3] = 4;
    for (int i = 4; i <= 30; i++) {
        fib[i] = fib[i-1]+fib[i-2]+fib[i-3];
    }
    while (true) {
        int t; cin >> t;
        if (!t) break;
        cout << ((fib[t]+9)/10+364)/365 << endl;
    }
    return 0;
}

C++: #include <iostream>

int dp[31];
int count(int n){
	if(dp[n] < 0){
		dp[n] = count(n-3)+count(n-2)+count(n-1);
	}
	return dp[n];
}
using namespace std;
int main(){
	for(int i = 0; i < 31; ++i){
		dp[i] = -1;
	}
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 4;
	int n;
	cin >> n;
	while(n){
		cout << ((count(n)+9)/10+364)/365 << endl;
		cin >> n;
	}
}

C++: #include <iostream>
using namespace std;

int dp[31];

int main() {
	int n;
	cin >> n;
	
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 4;
	for(int i = 4; i <= n; i++)
		dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
		
	int ans = (dp[n] % 3650 == 0) ? dp[n] /3650 : dp[n] / 3650 + 1;
	
	cout << ans << endl;
	return 0;
}

C++: #include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;

int main()
{
    int n;
    while (cin >> n)
    {
        if (n == 0)
            break;
        vector<int> dp(n + 1);
        dp[0] = 1;
        for (int now = 0; now < n; now++)
        {
            for (int next = now + 1; next <= min(now + 3, n); next++)
            {
                dp[next] += dp[now];
            }
        }
        int ans = dp[n] / 3650 + 1;
        cout << ans << endl;
    }
    return 0;
}

C++: #include <iostream>
using namespace std;

int main(){
  int n;
  int a[31]={};
  a[0]=1; a[1]=1; a[2]=2;
  for(int i=3;i<=30;i++) a[i]=a[i-3]+a[i-2]+a[i-1];
  
  while(cin >> n && n>0){
    cout << (a[n]+3599)/3600 << endl;
  }
}

C++: #include <cstdio>
 
#define MAX 31
 
int main(){
  int dp[MAX] = {1,1,2};
 
  for(int i = 3 ; i < MAX ; i++){
    dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
  }
 
  int n;
  while(scanf("%d" ,&n),n){
    printf("%d\n" ,dp[n]/3650+1);
  }
 
  return 0;
}

C++: 
#include <algorithm>
#include <iostream>
using namespace std;

int A[128], n, a; 
int main() {
	while(cin >> n && n >0){
		A[0] = 0;
		A[1] = 1;
		A[2] = 2;
		for (int i=3; i<=n+10; ++i) {
			A[i] = A[i-1]+A[i-2]+A[i-3];
		}
		a = (int)(A[n]+9)/10;
         	a = (int)(a+364)/365;
	cout << a << endl ;
	}
}

C++: #include <iostream>
using namespace std;

int num(int n);

int main(){
  int n;
  cin>>n;
  cout << num(n)/3650+1 <<endl;
}

int num(int n){
  if(n<1)return 0;
  return num(n-1)+num(n-2)+num(n-3);
}

C++: #define _LIBCPP_DEBUG 0
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll MOD = 1e9+7;

int main() {

    while(true){
        int dansu;
        cin>>dansu;
        if(dansu==0) break;

        vector<double> dp(31, 0);
        dp[0]=1;
        dp[1]=1;
        dp[2]=2;
        for (int i = 2; i <= dansu; ++i) {
            dp[i] = dp[i-1]+dp[i-2]+dp[i-3];
        }
        cout<<ceil(dp[dansu]/10/365)<<endl;
    }

    return 0;
}