鱼C论坛

 找回密码
 立即注册
查看: 929|回复: 1

咋不对

[复制链接]
发表于 2023-12-6 22:01:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
螺旋矩阵不对,就用递归的方法
#include<stdio.h>
void lml(int n,int a[n][n],int num,int x,int y)
{
    if(y<n-1&&a[x][y+1]==0)
    {
        y++;
        a[x][y]=num++;
        lml(n,a,num,x,y);
    }
    if(x<n-1&&a[x+1][y]==0)
    {
        x++;
        a[x][y]=num++;
        lml(n,a,num,x,y);
    }
    if(y>0&&a[x][y-1]==0)
    {
        y--;
        a[x][y]=num++;
        lml(n,a,num,x,y);
    }
    if(x>0&&a[x-1][y]==0)
    {
        x--;
        a[x][y]=num++;
        lml(n,a,num,x,y);
    }
}
int main()
{
    int n,i,j,c,d;
    scanf("%d%d%d",&n,&i,&j);
    int a[n][n],num=1;
    for(c=0;c<n;c++)
    {
        for(d=0;d<n;d++)
        {
            a[c][d]=0;
        }
    }
    int x=0,y=0;
    a[x][y]=num++;
    lml(n,a,num,x,y);
    printf("%d",a[i-1][j-1]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表