A - 计算组合数
Description
计算组合数。C(n,m),表示从n个数中选择m个的组合数。
计算公式如下:
若:m=0,C(n,m)=1
否则, 若 n=1,C(n,m)=1
否则,若m=n,C(n,m)=1
否则 C(n,m) = C(n-1,m-1) + C(n-1,m).
Input
第一行是正整数N,表示有N组要求的组合数。接下来N行,每行两个整数n,m (0 <= m <= n <= 20)。
Output
输出N行。每行输出一个整数表示C(n,m)。
Sample
Input
3
2 1
3 2
4 0
Output
2
3
1
#include <stdio.h>
void move(int,char,char,char);
int main()
{
int n;
scanf("%d",&n);
move(n,'A','B','C');
return 0;
}
void move(int m,char p,char q,char r)
{
if(m==1)
{
printf("Move disk %d from %c to %c\n",m,p,r);
}
else
{
move(m-1,p,r,q);
printf("Move disk %d from %c to %c\n",m,p,r);
move(m-1,q,p,r);
}
}
B - 神奇的函数
Description
神奇的函数是这样被定义的:
F(n, m) = {
if(n == 1 || m == 1)
F(n, m) = 1;
else
F(n, m) = F(n-1, m) + F(n, m-1);
}
Input
第一行是正整数N (1 <= N<= 30),表示有N组数据。
接下来N行,每行两个整数n,m (1 <= n, m <= 10)。
Output
输出N行。每行输出一个整数表示F(n,m)。
Sample
Input
1
1 2
Output
1
#include <stdio.h>
#include <stdlib.h>
int f(int n, int m);
int main()
{
int n, m, F;
while(~scanf("%d %d",&n,&m))
{
F=f(n,m);
printf("%d\n",F);
}
return 0;
}
int f(int n, int m)
{
if(m==1||n==1)
{
return 1;
}
else
{
return f(n-1,m)+f(n,m-1);
}
}
C - 喵帕斯之天才算数少女
Description
莲酱要上一年级了,但是老师给他出了一个特别难的算术题。
老师给出了一个函数
F(m, n)的定义是:
若m=0,返回n+1。
若m>0且n=0,返回F(m-1,1)。
若m>0且n>0,返回F(m-1,F(m,n-1))。
给出 m 和 n,