Problem Description
There are many students in PHT School. One day, the headmaster whose name is PigHeader wanted all students stand in a line. He prescribed that girl can not be in single. In other words, either no girl in the queue or more than one girl stands side by side. The case n=4 (n is the number of children) is like
FFFF, FFFM, MFFF, FFMM, MFFM, MMFF, MMMM
Here F stands for a girl and M stands for a boy. The total number of queue satisfied the headmaster’s needs is 7. Can you make a program to find the total number of queue with n children?
Input
There are multiple cases in this problem and ended by the EOF. In each case, there is only one integer n means the number of children (1<=n<=1000)
Output
For each test case, there is only one integer means the number of queue satisfied the headmaster’s needs.
Sample Input
1
2
3
Sample Output
1
2
4
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<float.h>
#define maxn 1005
int a[maxn][maxn];
void f(){
int i,j,t;
memset(a,0,sizeof(a));
a[0][0] = 1;
a[1][0] = 1;
a[2][0] = 2;
a[3][0] = 4;
a[4][0] = 7;
for(i=5 ;i<maxn ;i++){
for(j=0 ;j<maxn ;j++){
a[i][j] = a[i-1][j] + a[i-2][j] +a[i-4][j];
}
for(j=0 ;j<maxn ;j++){
if(a[i][j]>=10){ //如果某一位的数大于等于10,则需要进位
t = a[i][j] / 10; // 记一下进位的数
a[i][j] %= 10; // 进位后只留下一位整数
a[i][j+1] += t; //下一位加上进位的数
}
}
}
}
int main(){
int n,m,i;
f();
while(scanf("%d",&n) != EOF){
i = maxn - 1;
while(a[n][i] ==0 ){
i--;
}
for( ; i>=0 ;i--){
printf("%d",a[n][i]);
}
printf("\n");
}
return 0;
}