题目描述: 淘宝公司内部有许多新鲜的小玩具,例如淘宝智能机器人。小时候,大家都玩过那个吃豆子的游戏吧,这机器人就是按照这个游戏设计的,它会朝着豆子的方向行走。不过机器人还存在一个bug,他只会朝南和朝东走。现在有一块空地,分成了n*m个格子,每个格子内有一颗豆子。机器人的起点在西北角,终点在东南角。请问机器人从起点到终点有多少种不同的方法。
算法分析:因为每次都只能向下或者向左走,所以到一个格子的放法数为其上面的格子和右边格子的和,然后通过循环,每次算出一条对角线(不是起点到终点的对角线立即与其平行的线)的格子的值,直到最后一个格子!
c++代码(本人所写,可能不是最好):
#include<iostream>
using namespace std;
int main()
{
int m,n;
int a,b,c,d,i,j;
int arr1[1002],arr2[1000];
while(cin>>m>>n)
{
if(m>n)
{
a=m;
m=n;
n=a;
}
arr2[0]=1;
for(i=0;i<m;i++)
{
for(j=1;j<i;j++)
{
arr2[j]=arr1[j-1]+arr1[j];
}
arr2[j]=1;
for(a=0;a<=j;a++)
{
arr1[a]=arr2[a]009;
}
}
for(;i<n;i++)
{
arr2[0]=1;
for(j=1;j<m;j++)
{
arr2[j]=arr1[j-1]+arr1[j];
}
for(a=0;a<j;a++)
{
arr1[a]=arr2[a]009;
}
}
for(;i<m+n-1;i++)
{
for(j=0;j<m+n-i-1;j++)
arr2[j]=arr1[j]+arr1[j+1];
for(a=0;a<j;a++)
{
arr1[a]=arr2[a]009;
}
}
cout<<arr1[0]<<endl;
}
return 0;
}