列表

详情


OR144. 打印二维数组

描述

给定一个空的int类型的二维数组array[n][m]。
按下面的填充规则, 请编写一个函数将此二维数组填满并打印出来.

输入描述

输入的包括两个正整数,表示二维数组的大小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;
    }

上一题