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;
}
   


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

#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;
}

#include <stdio.h>

int main()
{
    int i,j,n,x,y;
    scanf("%d",&n);
    int a[n][n];
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            a[j][i]=0;
        }
    }
    
    x=n/2;y=n-1;
    a[x][y] = 1;
    
    for(i = 2;i<=n*n;i++)
    {
        x++;
        y++;
        if(x>=n)
        {
            x=0;
        }
        if(y>=n)
        {
            y=0;
        }
        
        if(a[x][y] != 0)
        {
            x=x-1;
            y=y-2;
            
            if(x<0)
            {
                x=x+n;
            }
            if(y<0)
            {
                y=y+n;
            }
        }
        
        a[x][y]=i;
    }

    for(i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            printf("%4d ",a[j][i]);
        }
        printf("\n");
    }
    
    return 0;
}

C语言:解决九宫格问题
如有帮助,望采纳

#include <stdio.h>
 
int main()
{
    unsigned char array[3][3] = {{1, 1, 1}, {1, 1, 1}, {1, 1, 1}};
    
    for(array[0][0] = 1; array[0][0] < 10; array[0][0]++)
    {
        for(array[0][1] = 1; array[0][1] < 10; array[0][1]++)
        {
            if(array[0][1] == array[0][0])
                continue;
            for(array[0][2] = 1; array[0][2] < 10; array[0][2]++)
            {    
                if(array[0][2] == array[0][0])
                    continue;
                if(array[0][2] == array[0][1])
                    continue;
                if((array[0][0] + array[0][1] + array[0][2]) != 15)
                    continue;
 
                for(array[1][0] = 1; array[1][0] < 10; array[1][0]++)
                {
                    if(array[1][0] == array[0][0])
                        continue;
                    if(array[1][0] == array[0][1])
                        continue;                    
                    if(array[1][0] == array[0][2])
                        continue;
                    for(array[1][1] = 1; array[1][1] < 10; array[1][1]++)
                    {
                        if(array[1][1] == array[0][0])
                            continue;
                        if(array[1][1] == array[0][1])
                            continue;                    
                        if(array[1][1] == array[0][2])
                            continue;
                        if(array[1][1] == array[1][0])
                            continue;
                        for(array[1][2] = 1; array[1][2] < 10; array[1][2]++)
                        {
                            if(array[1][2] == array[0][0])
                                continue;
                            if(array[1][2] == array[0][1])
                                continue;                    
                            if(array[1][2] == array[0][2])
                                continue;
                            if(array[1][2] == array[1][0])
                                continue;
                            if(array[1][2] == array[1][1])
                                continue;
                            if((array[1][0] + array[1][1] + array[1][2]) != 15)
                                continue;
 
                            for(array[2][0] = 1; array[2][0] < 10; array[2][0]++)
                            {
                                if(array[2][0] == array[0][0])
                                    continue;
                                if(array[2][0] == array[0][1])
                                    continue;                    
                                if(array[2][0] == array[0][2])
                                    continue;
                                if(array[2][0] == array[1][0])
                                    continue;
                                if(array[2][0] == array[1][1])
                                    continue;
                                if(array[2][0] == array[1][2])
                                    continue;
 
                                if((array[0][0] + array[1][0] + array[2][0]) != 15)
                                    continue;
 
                                for(array[2][1] = 1; array[2][1] < 10; array[2][1]++)
                                {
                                    if(array[2][1] == array[0][0])
                                        continue;
                                    if(array[2][1] == array[0][1])
                                        continue;                    
                                    if(array[2][1] == array[0][2])
                                        continue;
                                    if(array[2][1] == array[1][0])
                                        continue;
                                    if(array[2][1] == array[1][1])
                                        continue;
                                    if(array[2][1] == array[1][2])
                                        continue;
                                    if(array[2][1] == array[2][0])
                                        continue;
 
                                    if((array[0][1] + array[1][1] + array[2][1]) != 15)
                                        continue;
 
                                    for(array[2][2] = 1; array[2][2] < 10; array[2][2]++)
                                    {
                                        if(array[2][2] == array[0][0])
                                            continue;
                                        if(array[2][2] == array[0][1])
                                            continue;                    
                                        if(array[2][2] == array[0][2])
                                            continue;
                                        if(array[2][2] == array[1][0])
                                            continue;
                                        if(array[2][2] == array[1][1])
                                            continue;
                                        if(array[2][2] == array[1][2])
                                            continue;
                                        if(array[2][2] == array[2][0])
                                            continue;                                
                                        if(array[2][2] == array[2][1])
                                            continue;    
 
                                        if((array[2][0] + array[2][1] + array[2][2]) != 15)
                                            continue;
 
                                        if((array[0][2] + array[1][2] + array[2][2]) != 15)
                                            continue;
 
                                        if((array[0][0] + array[1][1] + array[2][2]) != 15)
                                            continue;
                                        if((array[0][2] + array[1][1] + array[2][0]) != 15)
                                            continue;
 
                                        printf("%d %d %d\n", array[0][0], array[0][1],  array[0][2]);
                                        printf("%d %d %d\n", array[1][0], array[1][1],  array[1][2]);
                                        printf("%d %d %d\n", array[2][0], array[2][1],  array[2][2]);
 
                                        printf("\n");
                                    }                                    
                                }    
                            }
                        }                    
                    }    
                }            
            }
        }    
    }
    getchar();
}

顶一个


#include<stdio.h>

int main()
{
    // 获取矩阵的大小
    int n;
    printf("请输入矩阵的大小:");
    scanf("%d", &n);

    // 初始化矩阵
    int a[n][n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = 0;
        }
    }

    // 设置矩阵的起点和方向
    int x = n / 2;
    int y = n - 1;
    int dx = 1;
    int dy = 1;

    // 填充矩阵
    int m = 1;
    while (1)
    {
        // 将当前位置的值赋为m
        a[y][x] = m;
        m++;

        // 如果已经填完矩阵,则退出循环
        if (m > n * n)
            break;

        // 计算下一个位置的坐标
        int x1 = x + dx;
        int y1 = y + dy;

        // 如果下一个位置已被占用,则改变方向
        if (a[y1][x1] != 0)
        {
            dy = -dy;
            y1 = y + dy;

            if (a[y1][x1] != 0)
            {
                dx = -dx;
                x1 = x + dx;
            }
        }

        // 更新当前位置的坐标
        x = x1;
        y = y1;
    }

    // 输出矩阵
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%4d ", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}