如果先横着切再竖着切,所需次数为(m-1)+(n-1)*m = mn-1; 如果先竖着切再横着切,所需次数为(n-1)+(m-1)*n = mn -1;所以结果为mn-1。代码如下:
View Code
1 #include <cstdio> 2 3 int main() 4 { 5 int m, n; 6 while(scanf("%d%d", &m, &n) != EOF) 7 printf("%d\n", m*n-1); 8 return 0; 9 }
上面代码耗时0.048s,下面的代码先计算结果保存到数组中,然后直接访问,耗时0.044s,也没快多少。
View Code
1 #include <cstdio> 2 3 int main() 4 { 5 int ans[301][301]; 6 for(int i = 1; i <= 300; i++) 7 for(int j = 1; j <= 300; j++) 8 ans[i][j] = i*j-1; 9 int m, n; 10 while(scanf("%d%d", &m ,&n) != EOF) 11 printf("%d\n", ans[m][n]); 12 return 0; 13 }
本来想写个程序先直接生成数组的,可是这样的话代码就太多了,九万个数。。。。。。