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 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持