小白螺旋矩阵求助

小干山 2020-10-26 04:38:45

实在不知道哪里出问题了 大佬们救救孩子吧

#include<stdio.h>
int main()
{
int i,j,n,k,l,c=1;
int a[n][n];
//输入
scanf("%d",&n);
//几圈
if(n%2==0) k=n/2;
else k=(n-1)/2;
//赋值
for(l=1;l<=k;l++)
{
for(i=(l-1);i<=(n-l-1);i++)//列不变 行变大
{
a[i][n-l]=c;
c++;
}
for(j=(n-l);j>=l;j--)//行不变 列变小
{
a[n-l][j]=c;
c++;
}
for(i=(n-l);i>=l;i--)//列不变 行变小
{
a[i][l-1]=c;
c++;
}
for(j=(l-1);j<=(n-1-l);j++)//行不变 列变大
{
a[l-1][j]=c;
c++;
}
}
//中心点
if(n%2!=0)
{
a[(n-1)/2][(n-1)/2]=c;
}
//输出
for(i=0;i<=(n-1);i++)
{
for(j=0;j<=(n-1);j++)
{
if(j==(n-1)) printf("%d\n",a[i][j]);
else printf("%d ",a[i][j]);
}
}
return 0;
}
...全文
120 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫叶醉 2020-10-27
  • 打赏
  • 举报
回复
把运行结果发出来看看,看看你的bug有哪些 ,你的数组难道没有申请失败吗?n你没有初始化,直接用来定义一个二维数组没问题吗?把它放在scanf后面申请
赵4老师 2020-10-27
  • 打赏
  • 举报
回复
仅供参考:
#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");
    }
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧