m0_73755275 2022-12-09 12:33 采纳率: 100%
浏览 116
已结题

c语言九宫格问题纠错

九宫格题目求纠错

题目:以中下格为起点,按右下为方向顺序填写(想象格子上下相连,左右相连),遇到右下格已占,填入正上方格内。

img

我的代码:

#include<stdio.h>

int main()
{
    int i,j,n,x1,y1;
    scanf("%d",&n);
    int a[n][n];
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            a[j][i]=0;
        }
        
        int x,y;
        x=n/2;
        y=n-1;
        int m=1;
        while(1)
        {
            a[y][x]=m;
            m++;
            if(m>(n*n))
                break;
            else
            {
                x1=x+1;
                x1=(x1%n);
                y1=y+1;
                y1=(y1%n);
                if(a[y1][x1]!=0)
                {
                    y--;
                }
                if(y<0)
                {
                    y+=n;
                }
                else
                {
                    x=x1;
                    y=y1;
                }
            }
            
        }
    }
        for(i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
            {
                printf("%4d ",a[i][j]);
            }
            printf("\n");
        }
    
    return 0;
}
   


  • 写回答

5条回答 默认 最新

  • X-道至简 2022-12-09 18:26
    关注

    在原代码上修改,可以运行了,并且上面的图也是有点错的

    #include<stdio.h>
    int main()
    {
        int i,j,n,x1,y1;
        scanf("%d",&n);
        int a[n][n];
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                a[j][i]=0;
            }
       } /*for到此结束,只是一个初始化为0就行了*/
            int x,y;
            x=n/2;
            y=n-1;
            int m=1;
            while(1)
            {
                a[y][x]=m;
                m++;
                if(m>(n*n))
                    break;
                else
                {
                    x1=x+1;
                    x1=(x1%n);
                    y1=y+1;
                    y1=(y1%n);
                    if(a[y1][x1]!=0)
                    {
                        y1--; /*这里是y1,不是y,因为操作的是y1*/
                    }
                    if(y1<0)
                    {
                        y1+=n;
                    }
                    //else /*删除*/
                    //{/*删除*/
                        x=x1;/*上面更新了x1和y1直接赋值就行*/
                        y=y1;
                    //}/*删除*/
                }
            }
     
            for(i=0;i<n;i++)
            {
                for (j=0;j<n;j++)
                {
                    printf("%4d ",a[i][j]);
                }
                printf("\n");
            }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月18日
  • 已采纳回答 12月10日
  • 修改了问题 12月9日
  • 创建了问题 12月9日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么