如:1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
最好有注解,复杂的的地方加一些讲解,谢谢!!
如何利用C输出一个螺旋数组
答案:4 悬赏:30
解决时间 2021-03-06 01:38
- 提问者网友:柠檬香
- 2021-03-05 11:37
最佳答案
- 二级知识专家网友:星痕之殇
- 2021-03-05 12:59
#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();
}
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();
}
全部回答
- 1楼网友:滚刀废物浮浪人
- 2021-03-05 16:16
#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();
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯