ChinaUnix第一届“C语言”开发大赛的第一题

给定一个整数N生成一个N*N的矩阵,矩阵中元素取值为1N21在左上角,

其余各数按顺时针方向旋转前进,依次递增放置。例如,当N=4时,矩阵中的内

 

容如下:

 

 

1

2

3

4

12

13

14

5

11

16

15

6

10

9

8

7

个人写的代码如下:

 

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

/*
矩阵赋值
思想是:就是一圈一圈的赋值
*/
void evaluate(int **a, int dimension)
{
 int start = 1;
 int i = 0;
 int j = 0;
 int row = 0;
 int column = dimension;

 do
 {
  while (j < column)
  {
   a[i][j] = start++;
   j++;
  }
  j--;

  while (i < column-1)
  {
   i++;
   a[i][j] = start++;
  }

  while (j > row)
  {
   j--;
   a[i][j] = start++;
  }

  while (i > row+1)
  {
   i--;
   a[i][j] = start++;
  }

  row++;
  column--;
  i = row;
  j = row;

 } while(start <= dimension*dimension);

 printf("赋值完成。。。/n");
}

 

/*打印矩阵*/
void printfMatrix(int **a, int dimension)
{
 printf("输出矩阵。。。/n");
 for (int i=0; i<dimension; ++i)
 {
  for (int j=0; j<dimension; ++j)
  {
   printf("%d ",a[i][j]);
  }
  printf("/n");
 }
}

 

int main(void)
{
 /*输入矩阵的维数*/
 printf("输入矩阵的维数:");
 int dime = 0;
 scanf("%d",&dime);
 printf("%d/n",dime);

 

 /*动态分配该矩阵*/
 int **matrix;
 matrix = (int**)malloc(sizeof(int*) * dime);
 for (int i=0; i<dime; ++i)
 {
  matrix[i] = (int*)malloc(sizeof(int) * dime);
 }

 

 /*给动态数组赋值*/
 evaluate(matrix,dime);

 

 /*打印数组*/
 printfMatrix(matrix,dime);

 

 /*动态释放该矩阵*/
 for (int j=0; j<dime; ++j)
 {
  free(matrix[j]);
 }
 free(matrix);


 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值