这个是我用递推的方法给你写的:
# include <stdio.h>
int a[41] , result[1000];
int main()
{
int n , m;
int i , j;
while(scanf("%d" , &n) != EOF)
{
for(i = 0 ; i < n ; i++)
{
scanf("%d" , &m);
if(m > 1)
a[1] = 1;
else
a[1] = 0;
a[2] = 1;
for(j = 3 ; j <= m ; j++)
a[j] = a[j-1] + a[j-2];
result[i] = a[m];
}
for(i = 0 ; i < n ; i++)
printf("%d\n" , result[i]);
}
return 0;
}
这个是我以前做这道题的时候使用的数学里的排列组合写的:
# include <stdio.h>
double function(int x , int y) ;
double recursion(int n) ;
double a[1000] ;
int main()
{
int n , m ;
int i , j , x ;
while(scanf("%d" , &n) != EOF)
{
i = 0 ;
while(i < n)
{
scanf("%d" , &m) ;
m -= 1 ;
a[i] = 1 ;
x = m / 2 ;
for(j = 1 ; j <= x ; j++)
a[i] += function(j , m - j) ;
i++ ;
}
for(i = 0 ; i < n ; i++)
printf("%.lf\n" , a[i]) ;
}
return 0 ;
}
double function(int x , int y)
{
double a , b , c, result ;
a = recursion(x) ;
b = recursion(y) ;
c = recursion(y - x) ;
result = b / (a * c) ;
return result ;
}
double recursion(int n)
{
double sum ;
if(n == 1 || n == 0)
return 1 ;
else
sum = n * recursion(n - 1) ;
return sum ;
}
好长时间没有做杭电的题了,都感觉有点陌生了!