题意很清晰,就是算出从一个对角线到另一个对角线有多小走法(只能向上,向右走)。
分析:一个矩阵,它有行有列,要到达对角线,必定有通过所有的行和列,那么存在两种情况,当行(n)==列(m),即刚好走完列和行,在m+n个里选m或n个组合得
C(m+n,m)或C(m+n,n)。
当两者不相等,就要看那个先到,所有最小的必定先到达。
另外数据应用unsigned型,它比int型存储的数要大1倍。
代码如下:
#include<stdio.h>
int main()
{
double sum;
unsigned n,m,a,b;
while(scanf("%d%d",&n,&m),n||m)
{
a=n+m;
b=n<m?n:m;
sum=1;
while(b>0)
sum*=a--/double(b--);
printf("%.0f\n",sum);
}
return 0;
}