解题报告:
题目大意:在一个棋盘上,从坐标为(1,1)的点走到坐标为(n,n)的点并且不经过这两点之间的对角线,问一共有多少种走法。
定义一个二维数组map[40][40],点map[i][j]的值为从(1,1)点走到这个点有多少种走法,而点(i,j) 可以由坐标为(i-1,j)和坐标为(i,j-1)这两个点走过来,所以走到(i,j)点的走法就有map[i-1][j]+map[i][j-1]种。另外要注意的是数据要用__int64,而且要初始化。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 __int64 map[40][40]; 4 int main() { 5 int n,l=1; 6 memset(map,0,sizeof(map)); 7 map[1][1]=1,map[2][1]=1,map[2][2]=1; 8 for(int i=3;i<=36;++i) 9 for(int j=1;j<=i;++j) 10 map[i][j]=map[i-1][j]+map[i][j-1]; 11 while(scanf("%d",&n)&&n!=-1) 12 printf("%d %d %I64d\n",l++,n,2*map[n+1][n+1]); 13 return 0; 14 }