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> // cout, endl, cin
#include <string> // string, to_string, stoi
#include <cstring>
#include <vector> // vector
#include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound
#include <utility> // pair, make_pair
#include <tuple> // tuple, make_tuple
#include <cstdint> // int64_t, int*_t
#include <cstdio> // printf
#include <map> // map
#include <queue> // queue, priority_queue
#include <set> // set
#include <stack> // stack
#include <deque> // deque
#include <unordered_map> // unordered_map
#include <unordered_set> // unordered_set
#include <bitset> // bitset
#include <cctype> // isupper, islower, isdigit, toupper, tolower
#include <cmath>
#include <numeric>
#include <float.h>
#include <math.h>
#include <sstream>
#include <iterator>
using namespace std;

// repマクロの定義
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep1(i, n) for (int i = 1; i <= (int)(n); i++)
// allマクロの定義
#define all(v) v.begin(), v.end()
// 大きい順
#define rall(v) v.rbegin(), v.rend()
#define vi vector<int>
#define vl vector<ll>
const  long long INF = 1LL << 60;
typedef  long long ll;
template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}



int ctoi(char c) {
 	switch (c) {
		case '0': return 0;
		case '1': return 1;
		case '2': return 2;
		case '3': return 3;
		case '4': return 4;
		case '5': return 5;
		case '6': return 6;
		case '7': return 7;
		case '8': return 8;
		case '9': return 9;
		default: return 0;
	}
}

bool is_prime(const unsigned n){
    switch(n){
        case 0: // fall-through
        case 1: return false;
        case 2: // fall-through
        case 3: return true;
    } // n > 3 が保証された

    if(n % 2 == 0 || n % 3 == 0) return false;
    // n は 2 と 3 のいずれの倍数でもないことが保証された
    // これより n は (6の倍数)-1 か (6の倍数)+1 である

    // 6の倍数前後の数を使って試し割りをする
    for(unsigned i = 5; i * i <= n; i += 6) {
        if(n % i     == 0) return false; // (6の倍数)-1
        if(n % (i+2) == 0) return false; // (6の倍数)+1
    }
    return true;
}

map<ll,ll> mp;

ll primeFactorization(ll a){ //素因数分解を出力するプログラム
    ll i,sq;
    if(a%2==0){ //偶数の場合
        if(!mp.count(2)){
            mp[2] = 1;
        }
        else{
            mp[2] +=1;
        }
        return primeFactorization(a/2); //2で割った値で再帰
    }
    sq = sqrt(a);
    for(i=3;i<=sq;i+=2){ //3以上√a以下の奇数の場合
        if(a%i==0){
            if(!mp.count(i)){
                mp[i] = 1;
            }
            else{
                mp[i] += 1;
            }
            return primeFactorization(a/i); //割れた値で再帰
        }
    }
    //偶数でも3以上√a以下の奇数の場合でも割り切れない場合
    if(a!=1){ //aが1でないなら、a自身は素数
        if(!mp.count(a))
        mp[a] = 1;
        else{
            mp[a] += 1;
        }
    }
    return 0;
}


ll kaizyou(ll n){
    if(n == 1){
        return 1;
    }
    else{
        return (n * kaizyou(n-1)) % 1000000007;
    }
}

/////////////*ここからatcoderの問題*/////////////
int main(){
vl dp(31);
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
rep(i,31){
        if(i > 2)
        dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
    }
while(true){
    int n; cin >> n;
    if(n == 0) break;
    cout << dp[n] / 10/ 365 + 1<< endl;
   
}

}

C++: #include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<cmath>
#include<utility>
#define ll long long int
#define EPS 0.0000000001
#define rep(i,n) for(i=0;i<n;i++)
using namespace std;
typedef pair<int, int> P;

string str;

ll step(ll n)
{
  if(n==2)return 2;
  if(n==1)return 1;
  if(n==0)return 1;

  ll a=step(n-1)+step(n-2)+step(n-3);

  return a;
}

int main()
{
  int n;
  int i,j;
  while(1){
    cin>>n;
    if(n==0)break;

    ll day=(step(n)+9)/10;

    cout<<(day+364)/365<<endl;

  }
}

C++: #include<iostream>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
typedef ll long long int
ll rr(int ll){
	if(y==0)
	return 1;
	else return y*rr(y-1);
}
ll func(ll i,ll j,ll k){
	return rr(i+j+k)/(rr(i)*rr(j)*rr(k));
}
int main(){
	ll n,sum,k;
	while(cin>>n,n){
		sum=0;
		for(ll i=0;i*3<=n;i++)
		for(ll j=0;j*2+3*i<=n;j++){
			k=n-(j*2+3*i);
			sum+=func(i,j,k);
		}
		if(sum%3650>0)
		cout<<sum/3650+1<<endl;
		else
		cout<<sum/3650<<endl;
	}
	return 0;
}

C++: // 0168_Kannondou.cpp
//
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 30;
int dp[MAX_N+1];
int solve(int n) {
  for(int i=0; i<=n; ++i) {
    if(i<=2) dp[i]=i;
    dp[i] = dp[i-1]+dp[i-2]+dp[i-3];
  }
  return dp[n];
}
int main() {
  int n;
  while(cin >> n, n){
    fill(dp, dp+MAX_N+1, 0);
    int day = (solve(n) + 10-1)/10;
    int year = (day + 365-1)/365;
    cout << year << endl;
  }
  return 0;
}

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

#include <iostream>
#include <vector>
#include <deque>
#include <queue>
#include <map>
#include <algorithm>

using namespace std;

#define rep(i, n) for(int i = 0; i < n; i++)
#define repi(i,l,n) for(int (i)=(int)(l);(i)<(int)(n);(i)++)
#define d_arr(arr, h, w) rep(i,(h) ){ cout << "["; rep(j,(w) ) { cout << (arr)[i][j] << ", "; } cout << "]" << endl;}
#define IN(x,s,g) ((x) >= (s) && (x) < (g))
#define ISIN(x,y,w,h) (IN((x),0,(w)) && IN((y),0,(h)))
#define print(x) printf("%d\n",x);

typedef pair<int ,int> P;

//n までの登り方の総数を返す
int solve(int n){
    if ( n <= 0) { return 1; }
    else if( n == 1 ){ return 1; }
    else if( n == 2 ){ return 2; }
    //else if( n == 3 ){ return 4; }
    return solve(n-1) + solve(n-2) + solve(n-3);
}

int main()
{
    while (true){
        int n;
        cin >> n;
        if ( n == 0) {break;}
        int sum = solve(n);
        int ret;
        if( sum % 3650  == 0){ ret = sum /3650; }
        else { ret = sum /3650 + 1; }
        cout << ret << endl;
    }
    return 0;
}

C++: #include <iostream>

int main(int argc, char const* argv[])
{
    int dp[35] = {0};



    dp[0] = 1;
    dp[1] = 1;
    dp[2] = 1;

    for (int i = 1; i < 31; i++) {
        if(i >= 1) dp[i] += dp[i-1];
        if(i >= 2) dp[i] += dp[i-2];
        if(i >= 3) dp[i] += dp[i-3];
    }

    while (true) {
        int n;
        std::cin >> n;
        if (n == 0) break;

        int year = 0;
        year = dp[n-1] / 3650;
        if ((dp[n-1] % 3650) > 0) year +=1;
        std::cout << year << std::endl;
    }

    return 0;
}

C++: #include <stdio.h>
#include <iostream>
#include <cstdio>
using namespace std;
int x, c=0;
void dfs(int pos) {
	if (pos == 1) {
		c++;
		return;
	}else if (pos == 2) {
		c = c + 2;
		return;
	}
	else if (pos == 3) {
		c = c + 4;
		return;
	}
	else {
		dfs(pos - 1);
		dfs(pos - 2);
		dfs(pos - 3);
	}


}

int main() {
	while (1) {
	int	days = 0, years = 0;
	c = 0;
	cin >> x;
	if (x == 0) {
		break;
	}
	dfs(x);
	days = c / 10;
	if (c % 10 != 0) {
		days++;
	}
	years = days / 365;
	if (days % 365 != 0) {
		years++;
	}
	cout << years << endl;
	}
	

}

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

int main() {
	int n, a[31] = {0,1,2,4};
	while (1) {
		cin >> n;
		if (n == 0) break;

		for (int i = 4; i <= n; i++) {
			a[i] = a[i - 1] + a[i - 2] + a[i - 3];
		}
		cout << (a[n] / 10 + 1) / 365 + 1 << endl;
	}
	return 0;
}