c语言蛇形矩阵
问题描述蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
数据输入
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)
数据输出
对于每一组数据,输出一个N
行的蛇形矩阵。两组输出之间不要额外的空行。
矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。
例如:输入
5
输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
/*网上找的,未测试*/ #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 5 6 7 8 */ y = n - round - 1; for(x=round+1;x<n-round-1;x++){ a[x][y]=count; count++; } /* 以下循环执行后输出如下: 1 2 3 4 5 6 7 8 13 12 11 10 9 */ x = n - round - 1; for(y=n-round-1;y>=round;y--){ a[x][y]=count; count++; } /* 以下循环执行后输出如下: 1 2 3 4 5 16 6 15 7 14 8 13 12 11 10 9 */ y = round; for(x=n-round-1-1;x>round;x--){ a[x][y]=count; count++; } } /* 上面的大循环执行后输出如下: 1 2 3 4 5 16 17 18 19 6 15 24 20 7 14 23 22 21 8 13 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; }