㧡悈 2023-04-05 11:32 采纳率: 25%
浏览 16

螺旋矩阵问题不知道哪里有问题?

程序执行不起来。
题目

img


1 <= n <= 20

#include <stdio.h>
#include <stdlib.h>

int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) 
{
    if (n <= 0) 
    {
        *returnSize = 0;
        *returnColumnSizes = NULL;
        return NULL;
    }

    int** res = (int**)malloc(n * sizeof(int*));
    if (res == NULL)
    {
        *returnSize = 0;
        *returnColumnSizes = NULL;
        return NULL;
    }

    for (int i = 0; i < n; i++) 
    {
        res[i] = (int*)malloc(n * sizeof(int));
        if (res[i] == NULL)
        {
            free(res[i]);
        }
        else
        {
            for (int j = 0; j < n; j++)
            {
                res[i][j] = (int)malloc(sizeof(int));
            }
        }
    }

    int a1 = n;
    int a2 = n - 1;
    int f = 1;
    int c1 = 0, c2 = 0;
    int w = 1;

    while (a1 > 0 || a2 > 0)
    {
        for (int i = 0; i < a2; i++)
        {
            res[c1][c2] = w;
            c2 = c2 + f;
            w++;
        }
        for (int i = 0; i < a1; i++) 
        {
            res[c1][c2] = w;
            c1 = c1 + f;
            w++;
        }
        a2--;
        a1--;
        f = -f;
    }

    returnSize =&n;
    for (int i = 0; i < n; i++) 
    {
        (*returnColumnSizes)[i] = n;
    }

    return res;
}

int main() {
    int n;
    printf("Please enter a number for the size of the matrix:\n");
    scanf_s("%d", &n);

    int returnSize;
    int* returnColumnSizes;
    int** res = generateMatrix(n, &returnSize, &returnColumnSizes);
    if (res == NULL)
    {
        printf("ERROR: Failed to allocate memory.\n");
        return -1;
    }

    for (int i = 0; i < returnSize; i++)
    {
        for (int j = 0; j < returnColumnSizes[i]; j++)
        {
            printf("%d ", res[i][j]);
        }
        printf("\n");
    }

    for (int i = 0; i < returnSize; i++)
    {
        free(res[i]);
    }
    free(res);
    free(returnColumnSizes);
    return 0;
}

img

img


想问怎么解决这个问题?

  • 写回答

2条回答 默认 最新

  • 赵4老师 2023-04-06 15:43
    关注

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

报告相同问题?

问题事件

  • 创建了问题 4月5日

悬赏问题

  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!
  • ¥15 这个如何解决详细步骤