鱼C论坛

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

咋不对

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

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

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

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

  1. #include<stdio.h>
  2. void lml(int n,int a[n][n],int num,int x,int y)
  3. {
  4.     if(y<n-1&&a[x][y+1]==0)
  5.     {
  6.         y++;
  7.         a[x][y]=num++;
  8.         lml(n,a,num,x,y);
  9.     }
  10.     if(x<n-1&&a[x+1][y]==0)
  11.     {
  12.         x++;
  13.         a[x][y]=num++;
  14.         lml(n,a,num,x,y);
  15.     }
  16.     if(y>0&&a[x][y-1]==0)
  17.     {
  18.         y--;
  19.         a[x][y]=num++;
  20.         lml(n,a,num,x,y);
  21.     }
  22.     if(x>0&&a[x-1][y]==0)
  23.     {
  24.         x--;
  25.         a[x][y]=num++;
  26.         lml(n,a,num,x,y);
  27.     }
  28. }
  29. int main()
  30. {
  31.     int n,i,j,c,d;
  32.     scanf("%d%d%d",&n,&i,&j);
  33.     int a[n][n],num=1;
  34.     for(c=0;c<n;c++)
  35.     {
  36.         for(d=0;d<n;d++)
  37.         {
  38.             a[c][d]=0;
  39.         }
  40.     }
  41.     int x=0,y=0;
  42.     a[x][y]=num++;
  43.     lml(n,a,num,x,y);
  44.     printf("%d",a[i-1][j-1]);
  45.     return 0;
  46. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-6 22:02:21 | 显示全部楼层
你的代码中有些地方有问题,让我来帮你修改一下。

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

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

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

下面是修改后的代码:
  1. #include <stdio.h>
  2. void lml(int n, int a, int num, int x, int y) {
  3.     // 递归终止条件
  4.     if (x <= 0 && y <= 0) {
  5.         return;
  6.     }
  7.    
  8.     // 向右
  9.     if (x >= y && x >= n - y - 1 && a == 0) {
  10.         y++;
  11.         a = num++;
  12.         lml(n, a, num, x, y);
  13.     }
  14.     // 向下
  15.     else if (x >= y && x > n - y - 1 && a == 1) {
  16.         x++;
  17.         a = num++;
  18.         lml(n, a, num, x, y);
  19.     }
  20.     // 向左
  21.     else if (x > y && x <= n - y - 1 && a == 2) {
  22.         y--;
  23.         a = num++;
  24.         lml(n, a, num, x, y);
  25.     }
  26.     // 向上
  27.     else if (x > y && x > n - y - 1 && a == 3) {
  28.         x--;
  29.         a = num++;
  30.         lml(n, a, num, x, y);
  31.     }
  32. }
  33. int main() {
  34.     int n, i, j;
  35.     scanf("%d%d%d", &n, &i, &j);
  36.     int a = 0, num = 1;
  37.     for (int c = 0; c < n; c++) {
  38.         for (int d = 0; d < n; d++) {
  39.             if (c == i && d == j) {
  40.                 printf("%2d ", num);
  41.             } else {
  42.                 printf("%2d ", 0);
  43.             }
  44.         }
  45.         printf("\n");
  46.     }
  47.     lml(n, a, num, i, j);
  48.     return 0;
  49. }
复制代码

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 00:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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