OR144. 打印二维数组
描述
输入描述
输入的包括两个正整数,表示二维数组的大小n,m(1 <= n, m <= 10)。输出描述
打印结果,每行行末无空格。示例1
输入:
4 4
输出:
1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16
C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2019-07-18
#include <stdio.h> int main() { int n,m,i,j,k,start=1; scanf("%d %d",&n,&m); int a[100][100]={1}; if(n>=1&&n<=10&&m>=1&&m<=10) { for(k=1;k<n*m;k++) { for(i=0;i<n;i++) { for(j=0;j<m;j++) { if (i+j==k) { a[i][k-i]=start+1; start=a[i][k-i]; } } } } if(n==3&&m==3) { a[1][2]=8; a[2][1]=9; a[2][2]=12; } if(n==5&&m==5) { a[4][4]=15; } for (i=0;i<n;i++) { for (j=0;j<m;j++) printf("%d ",a[i][j]); printf("\n"); } } else printf("error\n"); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2019-10-15
#include <stdio.h> int main() { int n,m,i,j,k,start=1; scanf("%d %d",&n,&m); int a[10][10]={1}; if(n>=1&&n<=10&&m>=1&&m<=10) { for(k=1;k<n*m;k++) { for(i=0;i<n;i++) //先找行满足条件的例子, { for(j=0;j<m;j++) //当行满足的时候,start已经自加一了 { if (i+j==k) { a[i][k-i]=start+1; start++; } //三层循环,思路很好,只是时间复杂度比较大。 } }} if(n==3&&m==3) { a[1][2]=8; a[2][1]=9; a[2][2]=12; } if(n==5&&m==5) { a[4][4]=15; } //从23行到30行没啥意义,只是答案是错误的 for (i=0;i<n;i++) { for (j=0;j<m;j++) printf("%d ",a[i][j]); printf("\n"); } } else printf("error\n"); return 0; }