mamaaini 发表于 2023-12-6 22:01:35

咋不对

螺旋矩阵不对,就用递归的方法

#include<stdio.h>
void lml(int n,int a,int num,int x,int y)
{
    if(y<n-1&&a==0)
    {
      y++;
      a=num++;
      lml(n,a,num,x,y);
    }
    if(x<n-1&&a==0)
    {
      x++;
      a=num++;
      lml(n,a,num,x,y);
    }
    if(y>0&&a==0)
    {
      y--;
      a=num++;
      lml(n,a,num,x,y);
    }
    if(x>0&&a==0)
    {
      x--;
      a=num++;
      lml(n,a,num,x,y);
    }
}
int main()
{
    int n,i,j,c,d;
    scanf("%d%d%d",&n,&i,&j);
    int a,num=1;
    for(c=0;c<n;c++)
    {
      for(d=0;d<n;d++)
      {
            a=0;
      }
    }
    int x=0,y=0;
    a=num++;
    lml(n,a,num,x,y);
    printf("%d",a);
    return 0;
}

FishC_GPT 发表于 2023-12-6 22:02:21

你的代码中有些地方有问题,让我来帮你修改一下。

首先,在 `lml` 函数中,你需要添加递归终止条件。当 `x` 和 `y` 的值都小于等于零时,递归结束。

其次,在递归调用 `lml` 函数之前,你需要分别判断当前位置的四种情况:向右、向下、向左和向上。根据当前的位置和方向,更新 `x` 和 `y` 的值,并将 `num` 加1。

最后,在 `main` 函数中,你需要调用 `lml` 函数,并传入初始值 `n`、`0`、`1`、`i` 和 `j`。

下面是修改后的代码:

#include <stdio.h>

void lml(int n, int a, int num, int x, int y) {
    // 递归终止条件
    if (x <= 0 && y <= 0) {
      return;
    }
   
    // 向右
    if (x >= y && x >= n - y - 1 && a == 0) {
      y++;
      a = num++;
      lml(n, a, num, x, y);
    }
    // 向下
    else if (x >= y && x > n - y - 1 && a == 1) {
      x++;
      a = num++;
      lml(n, a, num, x, y);
    }
    // 向左
    else if (x > y && x <= n - y - 1 && a == 2) {
      y--;
      a = num++;
      lml(n, a, num, x, y);
    }
    // 向上
    else if (x > y && x > n - y - 1 && a == 3) {
      x--;
      a = num++;
      lml(n, a, num, x, y);
    }
}

int main() {
    int n, i, j;
    scanf("%d%d%d", &n, &i, &j);
    int a = 0, num = 1;
    for (int c = 0; c < n; c++) {
      for (int d = 0; d < n; d++) {
            if (c == i && d == j) {
                printf("%2d ", num);
            } else {
                printf("%2d ", 0);
            }
      }
      printf("\n");
    }
    lml(n, a, num, i, j);
    return 0;
}

希望这次的代码能够正常运行,并且输出所需的螺旋矩阵。如果还有其他问题,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 咋不对