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 <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
using namespace std;
using ll = long long;

template<class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

template<class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}

int main() {
  int n;
  while (cin >> n) {
    if (n == 0) break;
    vector<ll> dp(n + 1);
    dp[0] = 1;
    for (int i = 1; i <= n; i++) {
      dp[i] += dp[i - 1];
      if (i >= 2) dp[i] += dp[i - 2];
      if (i >= 3) dp[i] += dp[i - 3];
    }
    cout << (dp[n] + 3649) / 3650 << endl;
  }
  return 0;
}

C++: #include <iostream>
#include <vector>
#include<queue>
using namespace std;
#define loop(i,n) for (int i = 0; i < n; i++)
int main()
{
	int n;
	while (cin >> n&&n)
	{
		vector<long long int> dp(n + 1, 0);
		dp[0] = 1;
		loop(i, n)
		{
			dp[i + 1] += dp[i];
			if (i + 2 <= n)dp[i + 2] += dp[i];
			if (i + 3 <= n)dp[i + 3] += dp[i];
		}
		cout << dp[n] / 3650 + 1 << endl;
	}
	return 0;
}

C++: #include<iostream>
using namespace std;
int main()
{
    while(1)
    {
        int dp[31]={1,1,2,4};
        int n;
        cin>>n;
        for(int i=4;i<=n;++i){
            dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
        }
        cout<<((dp[n]-1)/3650)+1<<endl;
    }
}

C++: 
#include<iostream>
#include<vector>
#include<cmath>

using namespace std;

int main(){
  int n;
  while(cin >> n && n!=0){
    vector<int> v(n+1,0);
    v[0]=1;
    for(int i=0;i<n;i++){
      v[i+1]+=v[i];
      if(i<n-1){v[i+2]+=v[i];}
      if(i<n-2){v[i+3]+=v[i];}
    }
    //int型の除算は切り捨て
    //http://bttb.s1.valueserver.jp/wordpress/blog/2017/07/23/競プロのテクニック-割り算の切り上げ、四捨五入/
    //参考にした

    cout << (((v[n]+9)/10)+364)/365 << endl;
  }
}

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 <bits/stdc++.h>
using namespace std;

#define rep(i,j) for(int (i)=0;(i)<(int)(j);++(i))

int a[300], n;

int main() {
    a[0] = 1;
    for (int i = 0; i <= 32; ++i) {
        if (i == 0) a[i] = 1;
        else if (i == 1) a[i] = a[i-1];
        else if (i == 2) a[i] = a[i-1]+a[i-2];
        else  a[i] = a[i-1]+a[i-2]+a[i-3];
    }

    while (cin >> n, n) {
        cout << (int)(((a[n]/10.0)/365.0)+0.5)+1 << endl;
    }
}

C++: #include <stdio.h>



long memo[31];

long fanc(int flo)
{
	int i;
	long sum=0;
	if(flo<0){return 0;}
	if(memo[flo]!=0){return memo[flo];}

	for(i=1;i<=3;i++)
	{
		sum+=fanc(flo-i);
	}
	
	return memo[flo]=sum;
}
int main()
{
	long int num;
	int n;
	int i;
	int ans;
	
	for(i=0;i<31;i++)
	{
		memo[i]=0;
	}
	memo[0]=1;
	while(scanf("%d",&n)&&n!=0)
	{
		num=fanc(n);
		ans=num/3650 + !!(num % 3650);
		
		printf("%d\n",ans);
	}
}

C++: #include <stdio.h>
#include <math.h>

#define N 30

int main(void) {
  int n = 0;
  int dp[N + 1] = {0};

  scanf("%d", &n);

  dp[0] = 1;

  while (n != 0) {
    for (int i = 1; i <= n; i++) {
      if (i == 1) {
	dp[1] = dp[i - 1];
      } else if (i == 2) {
	dp[2] = dp[i - 1] + dp[i - 2];
      } else {
	dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1];
      }
    }

    int years = (int) ceil((dp[n] / 10.0) / 365.0);

    printf("%d\n", years);

    scanf("%d", &n);    
  }
}

C++: #include <bits/stdc++.h>
using namespace std;
using ll = long long;
int dp[35];

int rec(int n) {
    if (0 <= dp[n]) return dp[n];
    if (n == 0) return 1;
    int s1 = 0 <= (n - 1) ? rec(n - 1) : 0;
    int s2 = 0 <= (n - 2) ? rec(n - 2) : 0;
    int s3 = 0 <= (n - 3) ? rec(n - 3) : 0;
    dp[n] = s1 + s2 + s3;
    return dp[n];
}

void solve(int n) {
    for (int i = 0; i < 35; ++i) dp[i] = -1;
    int x = rec(n);
    int y = x / 3650;
    int m = x % 3650;
    cout << (y == 0 ? 1 : y + 1) << endl;
}

int main() {
    while(true) {
        int n;
        cin >> n;
        if (n == 0) break;
        solve(n);
    }
    return 0;
}

C++: // 基本テンプレート
 
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <cfloat>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <fstream>
#include <functional>
using namespace std;
 
#define rep(i,a,n) for(int (i)=(a); (i)<(n); (i)++)
#define repq(i,a,n) for(int (i)=(a); (i)<=(n); (i)++)
#define repr(i,a,n) for(int (i)=(a); (i)>=(n); (i)--)
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define int long long int
 
template<typename T> void chmax(T &a, T b) {a = max(a, b);}
template<typename T> void chmin(T &a, T b) {a = min(a, b);}
template<typename T> void chadd(T &a, T b) {a = a + b;}
 
typedef pair<int, int> pii;
typedef long long ll;
 
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
const ll INF = 1001001001001001LL;
const ll MOD = 1000000007LL;
 
signed main() {
    int N;
    while(cin >> N, N) {
        vector<int> dp(N+1);
        dp[0] = 1;

        for(int i=0; i<N; i++) {
            for(int k=1; k<=3; k++) {
                if(i + k > N) continue;
                dp[i+k] += dp[i];
            }
        }
        const int YEAR = 3650;
        cout << (dp[N] + YEAR - 1) / YEAR << endl;
    }
    return 0;
}

C++: #include <iostream>
using namespace std;
int main()
{
	int dp[31]={},n,ans;
	dp[1]=1;
	dp[2]=2;
	dp[3]=4;
	for(int i=4;i<=30;i++){
		dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
	}
	while(cin>>n){
		if(n==0)break;
		ans=dp[n]/3650;
		ans+=dp[n]%3650!=0?1:0;
		cout<<ans<<endl;
	}
    return 0;
}