BC134. 蛇形矩阵
描述
给你一个整数n,输出n∗n的蛇形矩阵。输入描述
输入一行,包含一个整数n输出描述
输出n行,每行包含n个正整数,通过空格分隔。示例1
输入:
4
输出:
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
C 解法, 执行用时: 2ms, 内存消耗: 304KB, 提交时间: 2022-07-25
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); int count = 1; int row = 0, col = 0; int arr[50][50] = { 0 }; int i = 0; while (count <= n * n) { for (i = 0; i < 2; i++) { if (row < n && col < n) { arr[row][col] = count++; } col++; } col--; while (col) { row++; col--; if (row < n && col < n) { arr[row][col] = count++; } } row++; while (row) { if (row < n && col < n) { arr[row][col] = count++; } row--; col++; } } for (row = 0; row < n; row++) { for (col = 0; col < n; col++) { printf("%d ", arr[row][col]); } printf("\n"); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2022-05-22
#include<stdio.h> int main(void){ int i,j,a[100][100],n,k; scanf("%d",&n); k=1; //上三角 for(i=0;i<n;i++){ for(j=0;j<=i;j++){ if(i%2==0) a[i-j][j]=k; else a[j][i-j]=k; k++; } } for(i=n;i<2*n-1;i++){ for(j=1;j<2*n-i;j++){ if(i%2==0) a[n-j][j+i-n]=k; else a[j+i-n][n-j]=k; k++; } } for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("%d ",a[i][j]); } printf("\n"); } }
C 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2022-07-31
#include<stdio.h> int main() { int n=0; scanf("%d",&n); int str[101][101]; int limit=2; int row =0; int col=0; int num =2; int dir=0; int state=0; str[0][0]=1; str[n-1][n-1]=n*n; int delta=1; int i=0; int j=0; while(num<n*n-1) { if(!dir)//斜向下 { if(!state) { str[row][++col]=num++; while(col>0&&row<limit) { str[++row][--col]=num++; } } else { str[++row][col]=num++; while(col>n-limit &&row<n) { str[++row][--col]=num++; } } } else//斜向上 { if(!state) { str[++row][col]=num++; while(row>0&&col<limit) { str[--row][++col]=num++; } } else { str[row][++col]=num++; while(row>n-limit&&col<n) { str[--row][++col]=num++; } } } if(limit==n) { delta=-1; state=1; } limit+=delta; dir=!dir; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { printf("%d ",str[i][j]); } printf("\n"); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2022-05-30
#include <stdio.h> #include <stdio.h> int arr[100][100] = { 0 }; int main() { int n = 0; scanf("%d",&n); int i = 1, j = 1, k = 0,pos = 1; arr[i][j] = 1; for (k = 2; k <= n*n; k++) { if (i == 1 && j <n && pos ==1) { arr[i][++j] = k; pos = -1; } else if(j==1 && i<n && pos == -1) { arr[++i][j] = k; pos = 1; } else if (j == n && pos==1) { arr[++i][j] = k; pos = -1; } else if (i == n && pos ==-1) { arr[i][++j] = k; pos = 1; } else if (pos == 1) { arr[--i][++j] = k; } else if(pos == -1) { arr[++i][--j] = k; } } for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) printf("%d ",arr[i][j]); printf("\n"); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2022-07-29
#include<stdio.h> int main() { int n; scanf("%d",&n); int arr[n][n]; arr[0][0]=1; int pos=1;//表示方向,1是右上,-1是左下 int j=0,k=0;//j是行 k是列 for(int i=2;i<=n*n;i++)//进去站的那个位置开始准备走 { if(j==0&&pos==1&&k<n-1 )//碰到天花板 { arr[j][++k]=i; pos=-1; } else if(k==0&&pos==-1&&j<n-1)//碰到左边边界 { arr[++j][k]=i; pos=1; } else if(j==n-1&&pos==-1&&k<n-1)//碰到地板 { arr[j][++k]=i; pos=1; } else if(k==n-1&&pos==1&&j<n-1)//碰到右边边界 { arr[++j][k]=i; pos=-1; } else if(pos==1) { arr[--j][++k]=i; } else if(pos==-1) { arr[++j][--k]=i; } } for(int i=0;i<n;i++) { for (int j = 0; j < n ; j++) { printf("%d ",arr[i][j]); } printf("\n"); } }