中易网

如何利用C输出一个螺旋数组

答案:4  悬赏:30  
解决时间 2021-03-06 01:38
如:1 12 11 10

2 13 16 9

3 14 15 8

4 5 6 7
最好有注解,复杂的的地方加一些讲解,谢谢!!
最佳答案
#include<stdio.h>
void main()
{
int m=2,n;
int a[10][10]={1};
int dir=0;
int i=0,j=0;
printf("Please input N:");
scanf("%d", &n);
while(m<=n*n)
{
switch(dir)
{
case 0:
while(i<n-1 && a[i+1][j]==0) a[++i][j]=m++;

break;
case 1:
while(j<n-1 && a[i][j+1]==0) a[i][++j]=m++;

break;
case 2:
while(i>0 && a[i-1][j]==0) a[--i][j]=m++;

break;
case 3:
while(j>0 && a[i][j-1]==0) a[i][--j]=m++;

break;
default:break;
}
dir=(dir+1)%4;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
getch();
}
全部回答
#include //宏定义,定义螺旋矩阵的阶数,要想改变数组的阶数,只需在改变n的值即可 #define n 5 main() { int n,i,j,m=1; int a[n][n]={0};//定义螺旋数组,并初始化 //螺旋数组的实现 for(n=0;n<=n/2;n++) { for(j=n;j=n;j--) a[n-n-1][j]=m++; for(i=n-n-2;i>n;i--) a[i][n]=m++; } //输出螺旋数组 for(i=0;i
  • 2楼网友:都不是誰的誰
  • 2021-03-05 15:22
想输出几行(行数等于列数)就输入几 #include <stdio.h> #include <stdlib.h> #include <assert.h> #define MAX 10 int lx[MAX][MAX]; int b=0,n; void print() { int i,j; for (i=0;i<n;i++){ for (j=0;j<n;j++) printf("%4d",lx[i][j]); putchar('\n'); } } void try(int x,int y,int p) { b++; lx[x][y]=b; if (b<n*n) { switch (p) { case 1: if (x==n-1||lx[x+1][y]) try(x,y+1,2); else try(x+1,y,1); break; case 2: if (y==n-1||lx[x][y+1]) try(x-1,y,3); else try(x,y+1,2); break; case 3: if (x==0||lx[x-1][y]) try(x,y-1,4); else try(x-1,y,3); break; case 4: if (y==0||lx[x][y-1]) try(x+1,y,1); else try(x,y-1,4); break; } }else print(); } int main(void) { int i,j; for(i=0;i<MAX;i++) for (j=0;j<MAX;j++) lx[i][j]=0; printf("Input n:"); scanf("%d",&n); assert(n<=MAX); try (0,0,1); system("pause"); return 0; } //---------------------------------------------------------------------------
  • 3楼网友:情窦初殇
  • 2021-03-05 13:43
#include<stdio.h> #define max 20 void main() { int n; int m=2; int i=0,j=0; int d=0; int a[max][max]={1}; printf("请输入矩阵的行列数N:"); scanf("%d",&n); while(m<=n*n) { switch(d) { case 0: while(a[i+1][j]==0&&i<n-1) { i++; a[i][j]=m++; } break; case 1: while(a[i][j+1]==0&&j<n-1) { j++; a[i][j]=m++; } break; case 2: while(a[i-1][j]==0&&i>0) { i--; a[i][j]=m++; } break; case 3: while(a[i][j-1]==0&&j>0) { j--; a[i][j]=m++; } break; default:break; } d=(d+1)%4; } for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯