hzhh666 2024-11-13 00:35 采纳率: 0%
浏览 2

关于#c++#的问题,请各位专家解答!(相关搜索:蛇形矩阵)

为啥我这个蛇形矩阵不行呀?我感觉逻辑没有什么问题啊,问AI他说
“在填充蛇形矩阵的循环逻辑中存在一些不太准确的地方。例如,在每次内层循环(两个 while 循环)结束后,紧接着又执行了单独的 j++;snakematrix[i][j]=num++; 或者 i++;snakematrix[i][j]=num++; 操作,这可能会导致某些位置被重复填充或者跳过某些应该填充的位置,从而无法正确生成蛇形矩阵的预期样式。” 是这个问题吗?

img

img

  • 写回答

1条回答

  • 赵4老师 2024-11-13 09:56
    关注

    仅供参考:

    #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");
        }
    }
    
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 11月13日