面试题攻略之四

/*矩阵式螺旋输出*/

#include <stdio.h>
#include <malloc.h>

/*
填充数组:从数组的最外围开始,先向下填充一列,
再向右填充一行,再向上填充一列,最后向左填充
一行,注意向上向左填充时的约束条件
*/
void fillArray(int m,int n,int **array)
{
 int start_row = 0,start_column = 0;
 
 int end_row = m-1,end_column = n-1;

 int num = 1;

 int i,j;

 while(start_row <= end_row && start_column <= end_column)
 {
  for(i=start_row,j=start_column;i<=end_row;i++)
  {
   array[i][j] = num++;
  }

  for(i--,j++;j<=end_column;j++)
  {
   array[i][j] = num++;
  }

  for(j--,i--;(i>=start_row && j>start_column);i--)
  {
   array[i][j] = num++;
  }

  for(i++,j--;(j>start_column && i<end_row);j--)
  {
   array[i][j] = num++;
  }

  start_row += 1;start_column += 1;

  end_row -= 1;end_column -= 1;
 }
}

//输出数组
void outputArray(int m,int n,int **array)
{
 int i,j;

 for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)
  {
   printf("%-4d  ",array[i][j]);
  }
  printf("/n");
 }
}

int main()
{
 int **array;//二维数组元素的头指针

 int m,n;//m为数组元素的行数,n为数组元素的列数

 int i;

 printf("输入数组的行数与列数(中间以空格相隔):");
 scanf("%d%d",&m,&n);

 //根据数据的行数与列数申请相应的数据存储空间
 array = (int **)malloc(sizeof(int *) * m);
 for(i=0;i<m;i++)
 {
  array[i] = (int *)malloc(sizeof(int) * n);
 }


 fillArray(m,n,array);

 outputArray(m,n,array);

 free(array);

 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值