鱼C论坛

 找回密码
 立即注册
查看: 1374|回复: 2

关于魔方阵

[复制链接]
发表于 2015-1-3 20:38:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 firewater 于 2015-1-3 20:43 编辑

一开始写时,没有对数组进行初始化,不能正确输出结果,代码如下:
#include "stdio.h"
int main()
{
        int a[16][16] =; 
        int i, j=0, k=2,n;
        printf("input a n (n=1 to 15)");                /*n为奇数*/
        scanf("%d",&n);
        a[1][n/2+1]=1;
        i = 1,j=n/2+1;
        for (; k <= n*n; k++)
        {
                if (1 != i && j != n)
                {
                        i = i - 1;
                        j = j + 1;
                        if (a[i][j] != 0)
                        {
                                i = i + 2;
                                j = j - 1;
                                a[i][j] = k;
                        }
                        else
                        {
                                a[i][j] = k;
                        }
                }
                else if (1==i&&n==j)
                        {
                                i = i + 1;
                                a[i][j]=k;
                        }
                else if (1 == i)
                {
                        i = n;
                        j = j + 1;
                        if (a[i][j] != 0)
                        {
                                i = 2;
                                j = j - 1;
                                a[i][j] = k;
                        }
                        else
                        {
                                a[i][j] = k;
                        }
                }
                else if (n == j)
                {
                        i = i - 1;
                        j = 1;
                        if (a[i][j] != 0)
                        {
                                i = i + 2;
                                j = n;
                                a[i][j] = k;
                        }
                        else
                        {
                                a[i][j] = k;
                        }
                }
                
        }
        for (i = 1; i <= n; i++)
        {
                for (j = 1; j <= n; j++)
                {
                        printf("%3d",a[i][j]);
                }
                printf("\n");
        }

        return 0;
}
改后的代码,对数组进行了初始化,元素的值都为0,可以输出正确结果,代码如下:
#include "stdio.h"
int main()
{
        int a[16][16] = {0};                             /*先对元素进行初始化,全部赋值为0,则才能得到结果*/
        int i, j=0, k=2,n;
        printf("input a n (n=1 to 15)");                /*n为奇数*/
        scanf("%d",&n);
        a[1][n/2+1]=1;
        i = 1,j=n/2+1;
        for (; k <= n*n; k++)
        {
                if (1 != i && j != n)
                {
                        i = i - 1;
                        j = j + 1;
                        if (a[i][j] != 0)
                        {
                                i = i + 2;
                                j = j - 1;
                                a[i][j] = k;
                        }
                        else
                        {
                                a[i][j] = k;
                        }
                }
                else if (1==i&&n==j)
                        {
                                i = i + 1;
                                a[i][j]=k;
                        }
                else if (1 == i)
                {
                        i = n;
                        j = j + 1;
                        if (a[i][j] != 0)
                        {
                                i = 2;
                                j = j - 1;
                                a[i][j] = k;
                        }
                        else
                        {
                                a[i][j] = k;
                        }
                }
                else if (n == j)
                {
                        i = i - 1;
                        j = 1;
                        if (a[i][j] != 0)
                        {
                                i = i + 2;
                                j = n;
                                a[i][j] = k;
                        }
                        else
                        {
                                a[i][j] = k;
                        }
                }
                
        }
        for (i = 1; i <= n; i++)
        {
                for (j = 1; j <= n; j++)
                {
                        printf("%3d",a[i][j]);
                }
                printf("\n");
        }

        return 0;
}

数组未赋值的结果

数组未赋值的结果

数组赋值的结果

数组赋值的结果


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-3 20:43:58 | 显示全部楼层
自己顶下啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-3 21:32:19 | 显示全部楼层
这是教程的代码,但是我用vs2013总是运行不了,是编译器的问题,还是什么?
#include "stdio.h"
void main ()
{
        int a[16][16],i,j,k,p,n;
        p=1;
        while (1==p)
        {
                printf ("enter n (n=1 to 15):");
                p=0;
        }
        for (i=1;i<=n;i++)
        {
                for (j=1;j<=n;j++)
                {
                        a[i][j]=0;
                }
        }
        j=n/2+1;
        a[1][j]=1;
        for (k=2;k<=n*n;k++)
        {
                i=i-1;
                j=j+1;
                if ((i<1)&&(j>n))
                {
                        i=i+2;
                        j=j-1;
                }
                else
                {
                        if (i<1)
                        {
                                i=n;
                        }
                        if (j>n)
                        {
                                j=1;
                        }
                }
                if (a[i][j]==0)
                {
                        a[i][j]=k;
                }
                else
                {
                        i=i+2;
                        j=j-1;
                        a[i][j]=k;
                }
        }
        for (i=1;i<=n;i++)
        {
                for (j=1;j<=n;j++)
                {
                        printf ("%5d",a[i][j]);
                }
                printf ("\n");
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 11:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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