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 n;
int a[35];

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

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

int main() {
  int dan;
  while (cin >> dan && dan>0) {
    int array[dan];
    for (int i=0;i<=dan;++i) {
      if (i==0)
	array[i] = 1;
      else if (i==1)
	array[i] = array[i-1];
      else if (i==2)
	array[i] = array[i-1]+array[i-2];
      else
	array[i] = array[i-1]+array[i-2]+array[i-3];
    }
    cout << (((array[dan]+9)/10)+364)/365 << endl;
  }
}

C++: #include <iostream>
using namespace std;
int main(void){
    int n;
    int dp[31];
    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];
    }
    while(1){
        cin >> n;
        if(n == 0)  break;
        int x;
        x = dp[n] / 3650;
        if(dp[n]%3650 != 0) x++;
        cout << x << endl;
    }
    return 0;
}

C++: #define REP(i,n) for (int i=0;i<(n);i++)
#include <iostream>
#include <cmath>
using namespace std;

int main(){
        int n=0;
        while(cin>>n&&n>0){
                double a[n+1];
                REP(i,n+1){
                        switch(i){
                        case 0:
                                a[i] = 1;
                                break;
                        case 1:
                                a[i] = a[i-1];
                                break;
                        case 2:
                                a[i] = a[i-1] + a[i-2];
                                break;
                        default:
                                a[i] = a[i-1] + a[i-2] + a[i-3];
                                break;
                        }
                }
                cout << ceil(a[n] / 10 / 365) << endl;
        }
}

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

#define INF 999999999

int gcd(int x, int y) {
	if (x % y == 0)return y;
	else return gcd(y, x%y);
}

int lcm(int x, int y) {
	return x*y / gcd(x, y);
}

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

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];
	int tobi[TOBIN] = {1,2,3};
	
	// init
	for(int i=0; i<=MAXN; i++)
		dp[i] = 0;
	dp[1] = 1;
	dp[2] = 1;
	dp[3] = 1;

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

	// 年数
	for(int i=1; i<=MAXN; i++){
		dp[i] = dp[i] / ofDay / YEAR;
		dp[i] += 1;
	}

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

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

	return 0;
}

C++: #include <iostream>
using namespace std;
int num(int n);
int main()
{
  string s;
  cin >> s;
  cout << num(stoi(s)) <<endl;
  return 0;
}

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

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

long long calc(int x){
    if(x < 0) return 0;
    if(x == 0) return 1;
    return calc(x - 1) + calc(x - 2) + calc(x - 3);
}

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

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

C++: #include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define shosu(n) setprecision(n)
#define INF 999999999
using namespace std;
int main() {
  int a, kai[31];
  kai[0] = 1;
  kai[1] = 1;
  kai[2] = 2;
  for (int i = 3; i < 31; i++) {
    kai[i] = kai[i - 1] + kai[i - 2] + kai[i - 3];
  }
  rep(i, 30) kai[i] = kai[i] / 3650 + 1;
  while (cin >> a, a)
    cout << kai[a] << endl;
  return 0;
}

C++: #include <bits/stdc++.h>

using namespace std;

int main(void) {
  int n, dp[31];

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

  while (cin >> n, n) {
    cout << dp[n] / 3650 + 1 << endl;
  }

  return 0;
}

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

C++: #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>

using namespace std;

#define rep(i,j) REP((i), 0, (j))
#define REP(i,j,k) for(int i=(j);(i)<(k);++i)
#define BW(a,x,b) ((a)<=(x)&&(x)<=(b))
#define ALL(v) (v).begin(), (v).end()
#define LENGTHOF(x) (sizeof(x) / sizeof(*(x)))
#define AFILL(a, b) fill((int*)a, (int*)(a + LENGTHOF(a)), b)
#define SQ(x) ((x)*(x))
#define Mod(x, mod) (((x)+(mod)%(mod))
#define MP make_pair
#define PB push_back
#define Fi first
#define Se second
#define INF (1<<29)
#define EPS 1e-10
#define MOD 1000000007

typedef pair<int, int> pi;
typedef pair<int, pi> pii;
typedef vector<int> vi;
typedef queue<int> qi;
typedef long long ll;

ll dp[32];
int N;

int main(){
  while(cin >> N, N){
    memset(dp,0,sizeof(dp));
    dp[0]=1;
    for(int i=0;i<N;i++){
      for(int j=1;j<=3;j++){
	dp[i+j] += dp[i];
      }
    }
    int day = dp[N]/10 + ((dp[N]%10)?1:0);
    int res = day/365 + ((day%365)?1:0);
    cout <<  res << endl;
    //    cout << dp[N] << endl;;
  }
  return 0;
}

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

int fib(int n, int num);
int dx[31];

int main(){
	int n;
	dx[1] = 1;
	dx[2] = 2;
	dx[3] = 4;
	while(cin >>n){
		if(n == 0) break;
		int cnt = fib(n, 4), day, year;
		day = cnt / 10;
		if(cnt % 10 != 0) day++;
		year = day / 365;
		if(day % 10 != 0) year++;
		cout <<year <<endl;
	}
	return 0;
}

int fib(int n, int num){
	if(n == 1) return dx[1];
	if(n == 2) return dx[2];
	if(n == 3) return dx[3];
	else if(num <= n){
		dx[num] = dx[num - 3] + dx[num - 2] + dx[num - 1];
		if(num == n) return dx[num];
		else{
			num++;
			fib(n, num);
		}
	}
}

C++: 
#include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <utility>
#include <queue>
#define INF 1000000007

using namespace std;
typedef long long int ll;

int main(){
    vector<int> dp(31,0);
    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];
    }
    for (;;) {
        int n;
        cin >> n;
        if(n==0) break;
        int ans = dp[n]/(10*365);
        if(dp[n]%(365*10)>0) ans++;
        cout << ans <<endl;
    }
}