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++)
#define mrep(i,j,n) for(int i = j; i < n; i++)
#define reps(i,n) for(int i = 1; i <= n; i++)
#define rrep(i,n) for(int i = n-1; i >= 0; i--)
#define mreps(i,j,n) for(int i = j; i <= n; i++)
#define rreps(i,n) for(int i = n; i >= 1; i--)
#define co(x) cout << x <<endl
#define cs(x) cout << x <<" "
#define el cout << endl
#define sp(x) cout << setprecision(x);
#define cer(x) cerr << x <<endl
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define ERASE(x,val) x.erase(remove(ALL(x), val), x.end())
#define vi vector<int> 
#define vvi vector<vector<int>> 
#define vpii vector<pair<int,int>> 
#define vl vector<ll> 
#define vvl vector<vector<ll>> 
#define vb vector<bool> 
#define vvb vector<vector<bool>>
#define vs vector<string>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
ll mod = 1e9 + 7;
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; }
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) { ll g = gcd(a, b); return a * b / g; }
bool is_prime(ll x) { for (ll i = 2; i * i <= x; i++) { if (x % i == 0)return false; } return true; }

int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
	
	vl ans;
	while (true)
	{
		int n; cin >> n;
		if (n == 0)break;
		vl dp(n + 1,0);
		dp[0] = 1;
		rep(i, n)reps(j, 3)
		{
			if (i + j <= n)dp[i + j] += dp[i];
		}
		ll tmp = (dp[n]+3649)/3650;
		ans.push_back(tmp);
	}
	rep(i, sz(ans))co(ans[i]);
	return 0;
}

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

#define MEMO_MAX 100
typedef unsigned long long ULL;

bool Flag_memo_g = true;	//?????¢??????????????????

class Answer
{
public:
	Answer()
	{
		day = 10; year = 365;
		for(int i = 0; i < MEMO_MAX; i++)
		{
			memo[i] = 0;
			Flag_memo[i] = false;
		}
	}
	
	int N;	//??\???
	int day;
	int year;

	ULL memo[MEMO_MAX];
	bool Flag_memo[MEMO_MAX];
	
	ULL count(int cnt);	//??¨??¢?´¢(??±???)
	ULL count_memo(int cnt);	//??¨??¢?´¢(??±???)(?????¢???ver.)
	void set();	//??\???
	void OutPut();	//???????????????
	
	bool empty();	//???????????¶?????????
	bool ans();	//?§£???
};

ULL Answer::count(int cnt)
{
	if( cnt < 0 )
		return 0;
	
	else if( cnt == 0 )
		return 1;
	
	return count(cnt - 1) + count(cnt - 2) + count(cnt - 3);
}


ULL Answer::count_memo(int cnt)
{
	if( cnt < 0 )return 0;
	else if( cnt == 0 )return 1;
	
	if( !(Flag_memo[cnt]) )
	{
		memo[cnt] = count_memo(cnt - 1) + count_memo(cnt - 2) + count_memo(cnt - 3);
		Flag_memo[cnt] = true;
	}
	
	return memo[cnt];
}

void Answer::OutPut()
{
	if( N == 0 )
		return;
	int ans_ = 1;	//??????????????´???
	if( Flag_memo_g )
		ans_ += count_memo( N ) / (day * year);
	
	else if( !Flag_memo_g )
		ans_ += (count( N )) / (day * year);	//??\???
	
	cout << ans_ << endl;
}

void Answer::set()
{
	cin >> N;
}

bool Answer::empty()
{
	if( N == 0 )return false;
	else return true;
}

bool Answer::ans()
{
	set();
	OutPut();
	return empty();
}

int main()
{
	Answer ans;

	while( ans.ans() );
	return 0;
}

C++: #include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
#define repb(i,a,b) for(int i=a;i>=b;i--)
#define all(a) a.begin(),a.end()
#define o(a) cout<<a<<endl
#define int long long
#define fi first
#define se second
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;

//AOJ 0168

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

C++: #include <iostream>
#include <cstring>

const unsigned int MAX_N = 35;

int N;
int dp[MAX_N];

int main(){
    while(true){
        std::cin >> N;
        if(N == 0)
            break;
        
        memset(dp, 0, sizeof(dp));
        ++N;
        dp[0] = 1;

        for(int i = 0; i < N - 1; ++i){
           for(int j = 1; j <= 3; ++j){
                dp[i + j] += dp[i];
            }
        }

        int ans = dp[N - 1] / 3650 + (dp[N - 1] % 3650 != 0);

        std::cout << ans << std::endl;
    }
    return 0;
}

C++: #include<stdio.h>
int main(void){
   int dan,i,j,k,ans[31]={0},year;
    for(;;){
    scanf("%d",&dan);
    if(dan==0)break;
    year=0;
    ans[0]=1;
    for(i=1;i<=dan;i++){
        if(i==1){
            ans[1]=ans[0];
        }
        else if(i==2){
            ans[2]=ans[0]+ans[1];
        }
        else ans[i]=ans[i-1]+ans[i-2]+ans[i-3];
    }
    if(ans[dan]%3650==0){
        year=ans[dan]/3650;
    }
    else{
        year=ans[dan]/3650+1;
    }
    printf("%d\n",year);
    }
return 0;
}

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

using namespace std;

int main() {
  int n;
  while (cin >> n, n) {
    vector<int> mp(n + 10, 0);
    mp[0] = 1;
    for (int i = 0; i <= n; i++) {
      for (int k = 1; k <= 3; k++) {
	mp[i + k] += mp[i];
      }
    }
    cout << (mp[n] + 3649) / 3650 << endl;
  }
  return 0;
}

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

using namespace std;

int main(void)
{
	int n;
	while(cin >> n && n != 0)
	{
		vector<int> a(n+1);
		a[0] = 1;a[1] = 1;a[2] = 2;

		for (int i = 3; i <= n; i++)
			a[i] = a[i-1] + a[i-2] + a[i-3];

		double year;
		year = ceil((double)a[n] / 3650);
		cout << year << endl;
	}

	return 0;
}

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[n]/3650+1<<std::endl;
    }
    return 0;
}

C++: #include <iostream>
#include <algorithm>

using namespace std;

int main(void){
	int i, j, n, dp[31];
	cin >> n;
	fill(dp,dp + 31,0);
	dp[0] = 1;
	for(i = 0;i < n;i++){
		for(j = 1;j <= 3;j++){
			if(i + j <= n){
				dp[i + j] += dp[i];
			}
		}
	}
	cout << dp[n] / 3650 + 1 << endl;
	return 0;
}

C++: #include <iostream>
#include <sstream>
#include <stdio.h>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <math.h>
#include <utility>
#include <string>
#include <ctype.h>
#include <cstring>
#include <sstream>
using namespace std;

#define FOR(i,k,n) for(int i = (k); i < (n); i++)
#define REP(i,n) FOR(i,0,n)
#define INF 114514810
#define ll long long

int n;
int step[35];

int main()
{
	step[0] = 0;
	step[1] = 1;
	step[2] = 2;
	step[3] = 4;
	FOR(i, 1, 30)
	{
		step[i + 3] = step[i + 2] + step[i + 1] + step[i];
	}
	while (1)
	{
		cin >> n; if (n == 0) return 0;
		if (step[n] % 3650 == 0) cout << step[n] / 3650 << endl;
		else cout << step[n] / 3650 + 1 << endl;
	}

}

C++: #include <iostream>
#include <cstdio>
#include <algorithm>
#include <functional>
#include <vector>
#include <string>
#include <cstring>

#define rep(i,n) for(int i=0;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define repn(i,n,m) for(int i=n;i<m;i++)
#define repn1(i,n,m) for(int i=n;i<=m;i++)
using namespace std;

int main(){

	int dp[100] = {0};
	int n;
	
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 4;

	repn1(i, 4, 30) dp[i] = dp[i-1] + dp[i-2] + dp[i-3];

	while(cin >> n, n){

		cout << dp[n] / 3650 + (dp[n]%3650==0 ? 0 : 1) << endl;
	}

	return 0;
}