int i,j,k,s,n;
int a[N][N];
printf("请输入方阵类型\n");
scanf("%d",&n);
k=1;s=0;i=0;
while (k<=n*n){
for (j=s;j<n-s;j++){
a[i][j]=k++;
}
j--;
for (i=s+1;i<n-s;i++){
a[i][j]=k++;
}
i--;
for (j=n-s-2;j>=s;j--){
a[i][j]=k++;
}
j++;
for (i=n-s-2;i>=s+1;i--){
a[i][j]=k++;
}
i++;
s++;
}
for (i=0;i<n;i++){
for (j=0;j<n;j++){
printf("%4d",a[i][j]);
}
printf("\n");
}
//请教各位专业人士这个中间的循环能用中文翻译一遍嘛😭
就是从最外层开始生成一个螺旋方阵
#define N 10
int main()
{
int i, j, k, s, n;
int a[N][N];
printf("请输入方阵类型\n");
scanf("%d", &n);
n = 5;//为了给你展示方便,这里n取5
k = 1; s = 0; i = 0; //这里s应该代表圈
while (k <= n * n) { //整个矩阵填充满后停止
for (j = s; j < n - s; j++) { //横坐标不变,纵坐标从s到n-s-1放入k值,比如最外圈(第0圈):从a[0][0]到a[0][4] 为 1 2 3 4 5
a[i][j] = k++;
}
j--; //j多加了1,所以减回来,比如最外圈(第0圈):此时j = 5 - 1 = 4
for (i = s + 1; i < n - s; i++) { //纵坐标不变,横坐标从s+1到n-s-1放入k值,比如最外圈(第0圈):从a[1][4]到a[4][4] 为 6 7 8 9
a[i][j] = k++;
}
i--; //i多加了1,所以减回来,比如最外圈(第0圈):此时i = 5 - 1 = 4
for (j = n - s - 2; j >= s; j--) { //横坐标不变,纵坐标从n-s-2到s放入k值,比如最外圈(第0圈):从a[4][3]到a[4][0] 为 10 11 12 13
a[i][j] = k++;
}
j++; //j多减了1,所以加回来 ,比如最外圈(第0圈):此时j = -1 + 1 = 0
for (i = n - s - 2; i >= s + 1; i--) { //纵坐标不变,横坐标从n-s-2到s+1放入k值,比如最外圈(第0圈):从a[3][0]到a[1][0] 为 14 15 16
a[i][j] = k++;
}
i++; //i多减了1,所以加回来 ,比如最外圈(第0圈):此时i = 0 + 1 = 1
s++; //下一圈
}
for (i = 0; i < n; i++) { //打印整个方阵
for (j = 0; j < n; j++) {
printf("%4d", a[i][j]);
}
printf("\n");
}
}
Do not let me think.
#include <stdio.h>
#define MAXN 100
int m[MAXN+2][MAXN+2];
char d;
int x,y,k,n,w;
char str[10];
void main() {
while (1) {
printf("Input n(1..%d):",MAXN);
fflush(stdout);
rewind(stdin);
if (1==scanf("%d",&n)) {
if (1<=n && n<=MAXN) break;
}
}
y=0 ;for (x=0;x<=n+1;x++) m[y][x]=1;
y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1;
x=0 ;for (y=0;y<=n+1;y++) m[y][x]=1;
x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1;
for (y=1;y<=n;y++) {
for (x=1;x<=n;x++) {
m[y][x]=0;
}
}
x=1;
y=1;
k=0;
d='D';
while (1) {
k++;
if (k>n*n) break;
m[y][x]=k;
switch (d) {
case 'D':
if (0==m[y+1][x]) y++;
else {x++;d='R';}
break;
case 'R':
if (0==m[y][x+1]) x++;
else {y--;d='U';}
break;
case 'U':
if (0==m[y-1][x]) y--;
else {x--;d='L';}
break;
case 'L':
if (0==m[y][x-1]) x--;
else {y++;d='D';}
break;
}
}
w=sprintf(str,"%d",n*n);
for (y=1;y<=n;y++) {
for (x=1;x<=n;x++) {
printf(" %0*d",w,m[y][x]);
}
printf("\n");
}
}