c实现输出二维蛇形矩阵
直接上代码:
#include <malloc.h>#include <stdio.h>int main(void){//用户输入的值,创建n*n的矩阵int n;//蛇形从1开始计数int count = 1;//a[x][y],x是二维数组的第一个下标,y是第二个。//round是蛇形矩阵的第几圈,从0开始。int x,y,round;scanf("%d",&n);int (*a)[n] = calloc(n*n,sizeof(int));//如果n是1,则直接输出。if(n == 1){a[0][0] = count;}else{//下面以n=5为例//一共有2(5/2)圈蛇形for(round=0; round<n/2; round++){/* 以下循环执行后输出如下:1 2 3 4 5*/x = round;for(y=round;y<n-round;y++){a[x][y]=count;count++;}/* 以下循环执行后输出如下:1 2 3 4 5678*/y = n - round - 1;for(x=round+1;x<n-round-1;x++){a[x][y]=count;count++;}/* 以下循环执行后输出如下:1 2 3 4 567813 12 11 109*/x = n - round - 1;for(y=n-round-1;y>=round;y--){a[x][y]=count;count++;}/* 以下循环执行后输出如下:1 2 3 4 516615714813 12 11 10 9*/y = round;for(x=n-round-1-1;x>round;x--){a[x][y]=count;count++;}}/* 上面的大循环执行后输出如下:1 2 3 4 516 17 18 19 615 24 20 714 23 22 21 813 12 11 10 9*/if(n%2 == 1){//如果n值奇数,将最中间的空填上a[n/2][n/2] = count;}}//打印矩阵for(x=0;x<n;x++){for(y=0;y<n;y++){printf("%d ",a[x][y]);}printf("\n");}printf("\n");free(a);return 0;}执行结果如下:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9