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<map>
#include<set>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<string>
#include<vector>
#include<complex>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<numeric>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<functional>
#include<cctype>

#define mp make_pair
#define pb push_back
#define REP(i,a,n) for(int i = a;i < (n);i++)
#define rep(i,n) for(int i = 0;i < (n);i++)
#define all(s) s.begin(), s.end()
#define rall(s) s.rbegin(), s.rend()

using namespace std;

typedef long long LL;
typedef vector<int> VI;
typedef vector<vector<int> > VII;
typedef pair<int,int> PII;

const int DX[]={1,0,-1,0},DY[]={0,-1,0,1};

int n;
LL memo[31];

LL solve(int cnt){
	if(memo[cnt] != -1) return memo[cnt];
	if(cnt >= n) return cnt > n? 0 : memo[cnt] = cnt == n;
	LL res1 = memo[cnt] = solve(cnt + 1);
	LL res2 = memo[cnt] = solve(cnt + 2);
	LL res3 = memo[cnt] = solve(cnt + 3);
	return memo[cnt] = res1 + res2 + res3;
}

int main(){
	cin.tie(0);
   	ios::sync_with_stdio(false);
	while(1){
		rep(i,31)
			memo[i] = -1;
		cin >> n;
		if(n == 0) break;
		LL ans = solve(0);
		cout << ans / 10 / 365 + 1 << endl;
	}

	return 0;
}

C++: #include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<utility>
#include<cmath>
#define loop(i,a,b) for(int i=a;i<b;i++)
#define rep(i,a) loop(i,0,a)
#define pi acos(-1)
#define all(v) v.begin(),v.end()
using namespace std;

const double eps = 1e-8;
const double INF = 1e12;

typedef pair<long,long> P;
typedef double Real;
typedef complex<Real> Point;
typedef vector<Point> G;

double cross(const Point& a,const Point& b){//calculate ad-bc(vector product)
	return imag(conj(a)*b);
}

struct L:public vector<Point>{//line data
	L(const Point &a,const Point &b){
		push_back(a);
		push_back(b);
	}
};

int n;
int dp[31];

long long func(int i){//i??????????§???????n??????????????????????????°???????????¢??°
	long long res;
	if(dp[i]!=-1)return dp[i];
	if(i==n)return 1;
	else if(i==n-1)res=func(i+1);
	else if(i==n-2)res=func(i+1)+func(i+2);
	else res=func(i+1)+func(i+2)+func(i+3);
	return dp[i]=res;
}

int main(){
	while(cin>>n){
		if(!n)break;
		memset(dp,-1,sizeof(dp));
		unsigned long long sum=func(0);
		cout<<"---------------"<<endl;
		cout<<sizeof(sum)<<endl;
		cout<<"---------------"<<endl;
		cout<<"sum="<<sum<<endl;
		rep(i,31)cout<<i<<"="<<dp[i]<<endl;
		int ans=sum/3650;
		if(sum%365)ans++;
		cout<<ans<<endl;
	}
	return 0;
}

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

int main()
{
	int n, i;
	while (1){
		cin >> n;
		int a[35] = {};
		if (n == 0) break;
		a[0] = 0;
		a[1] = 0;
		a[2] = 1;
		for (i = 0; i < n; i++){
			a[i + 3] = a[i + 2] + a[i + 1] + a[i];
		}
		cout << a[n + 2] << endl;
	}
	return 0;
}

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

unsigned long long memo[31];

int recursion(int n){
  if(n <= 0) return 1;
  if(memo[n] != 0) return memo[n];
  return memo[n] = recursion(n-3) + recursion(n-1) + recursion(n-2);
}

int main(){
  int n;
  while(cin >> n,n){
    memo[1] = 1;
    memo[2] = 2;
    memo[3] = 4;
    recursion(n);
    cout << ((memo[n]%3650 == 0)? memo[n]/3650 : memo[n]/3650 +1) << endl;
  }
}

C++: #include<iostream>

using namespace std;

int main(void){

	std::ios_base::sync_with_stdio();

	int dp[31]={0};
	int n;

	dp[0]=1;
	for(int i=1;i<=30;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(1){
		cin>>n;
		if(n==0) break;
		cout<<dp[n]/365/10+1<<endl;
	}

	return 0;
}

C++: #include<iostream>
using namespace std;
#define MAX 30
int F[MAX+1];

main(){
    F[0] = 1;
    F[1] = 1;
    F[2] = 2;
    for ( int i = 3; i <= MAX; i++ ) F[i] = F[i-3] + F[i-2] + F[i-1];

    int n;
    while( cin >> n && n ){
	int p = F[n]/10;
	if ( F[n]%10 ) p++;
	int pp = p/365;
	if ( p%356) pp++;

	cout <<  pp << endl;
    }
}

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

// #define int long long

/* short */
#define pb push_back
#define print(Target) cout << Target << '\n'

/* REPmacro */
#define REP(i, n) for (int i = 0; i < (n); i++)
#define REPS(i, a, n) for (int i = (a); i < (n); i++)

/* typedef */
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<vector<int> > vii;
typedef pair<int, int> pii;

/* func */
inline bool is_uruu(int y) {return (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0));}

/* const */
const int INF = INT_MAX;

int dp[31];

int shinobu(int n)
{
  if (dp[n] != -1){
    return (dp[n]);
  }
  if (n == 1) return (1);
  if (n == 2) return (2);
  if (n == 3) return (4);
  return (dp[n] = shinobu(n - 1) + shinobu(n - 2) + shinobu(n - 3));
}

signed main()
{
  ios::sync_with_stdio(false);
  int n;

  while (cin >> n, n){
    fill(dp, dp + 31, -1);
    print(shinobu(n) / 3650 + 1);
  }
  return (0);
}

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

int main(void){
  int n, p[31] = {1, 1, 2};
  for(int i = 3; i <= 30; i++){
    p[i] = p[i-1] + p[i-2] + p[i-3];
  }
  while(true){
    cin >> n;
    if(n == 0) break;
    int y = (p[n] / 10 / 365);
    if(p[n] % 3650 != 0) y++;
    cout << y << endl;
  }
  return 0;
}

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;

	repn(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;
}

C++: #include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
    vector<int> dp(31,0);
    dp[0]=1;
    dp[1]=1;
    dp[2]=2;
    for (int i=3; i<=30; i++){
        dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
    }
    for(;;){
        int n;
        cin >> n;
        if(n==0) break;
        int ans = dp[n]/(365*10);
        if(dp[n]%(365*10)>0) ans++;
        cout << ans << endl;
    }
    return 0;
}

C++: #include <iostream>
using namespace std;
int main(void){
   while(true){

       int y=0,n;
       int a[31]={0};
       cin >> n;

       if(n==0)    break;

       a[1]=1;
       a[2]=2;
       a[3]=4;
       for(int i=4;i<31;i++){
           a[i]=a[i-1]+a[i-2]+a[i-3];
       }

       y=(a[n]/10)/365+1;
       cout << y << endl;

   }
}

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

int main(void){
	const int ofDay = 10;
	const int MAXN = 30;
	const int TOBIN = 3;
	const int YEAR = 365;
	int dp[MAXN+1];
	
	// init
	for(int i=1; i<=MAXN; i++)
		dp[i] = 0;
	dp[0] = 1;

	// 全通り計算
	for(int i=0; i<=MAXN; i++){
		for(int j=1; j<=TOBIN; j++){
			if( i+j <= MAXN )
				dp[i+j] += dp[i];
		}
	}

	// 年数計算
	for(int i=1; i<=MAXN; i++){
		dp[i] = dp[i] / ofDay + (dp[i] % ofDay ? 1 : 0);
		dp[i] = dp[i] / YEAR + (dp[i] % YEAR ? 1 : 0);
	}

	// 対話
	while( true ){
		int n;
		cin >> n;
		if( n == 0 )
			break;

		cout << dp[n] << endl;
	}

	return 0;
}