鱼C论坛

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

关于魔方阵

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

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

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

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

一开始写时,没有对数组进行初始化,不能正确输出结果,代码如下:
  1. #include "stdio.h"
  2. int main()
  3. {
  4.         int a[16][16] =;
  5.         int i, j=0, k=2,n;
  6.         printf("input a n (n=1 to 15)");                /*n为奇数*/
  7.         scanf("%d",&n);
  8.         a[1][n/2+1]=1;
  9.         i = 1,j=n/2+1;
  10.         for (; k <= n*n; k++)
  11.         {
  12.                 if (1 != i && j != n)
  13.                 {
  14.                         i = i - 1;
  15.                         j = j + 1;
  16.                         if (a[i][j] != 0)
  17.                         {
  18.                                 i = i + 2;
  19.                                 j = j - 1;
  20.                                 a[i][j] = k;
  21.                         }
  22.                         else
  23.                         {
  24.                                 a[i][j] = k;
  25.                         }
  26.                 }
  27.                 else if (1==i&&n==j)
  28.                         {
  29.                                 i = i + 1;
  30.                                 a[i][j]=k;
  31.                         }
  32.                 else if (1 == i)
  33.                 {
  34.                         i = n;
  35.                         j = j + 1;
  36.                         if (a[i][j] != 0)
  37.                         {
  38.                                 i = 2;
  39.                                 j = j - 1;
  40.                                 a[i][j] = k;
  41.                         }
  42.                         else
  43.                         {
  44.                                 a[i][j] = k;
  45.                         }
  46.                 }
  47.                 else if (n == j)
  48.                 {
  49.                         i = i - 1;
  50.                         j = 1;
  51.                         if (a[i][j] != 0)
  52.                         {
  53.                                 i = i + 2;
  54.                                 j = n;
  55.                                 a[i][j] = k;
  56.                         }
  57.                         else
  58.                         {
  59.                                 a[i][j] = k;
  60.                         }
  61.                 }
  62.                
  63.         }
  64.         for (i = 1; i <= n; i++)
  65.         {
  66.                 for (j = 1; j <= n; j++)
  67.                 {
  68.                         printf("%3d",a[i][j]);
  69.                 }
  70.                 printf("\n");
  71.         }

  72.         return 0;
  73. }
复制代码

改后的代码,对数组进行了初始化,元素的值都为0,可以输出正确结果,代码如下:
  1. #include "stdio.h"
  2. int main()
  3. {
  4.         int a[16][16] = {0};                             /*先对元素进行初始化,全部赋值为0,则才能得到结果*/
  5.         int i, j=0, k=2,n;
  6.         printf("input a n (n=1 to 15)");                /*n为奇数*/
  7.         scanf("%d",&n);
  8.         a[1][n/2+1]=1;
  9.         i = 1,j=n/2+1;
  10.         for (; k <= n*n; k++)
  11.         {
  12.                 if (1 != i && j != n)
  13.                 {
  14.                         i = i - 1;
  15.                         j = j + 1;
  16.                         if (a[i][j] != 0)
  17.                         {
  18.                                 i = i + 2;
  19.                                 j = j - 1;
  20.                                 a[i][j] = k;
  21.                         }
  22.                         else
  23.                         {
  24.                                 a[i][j] = k;
  25.                         }
  26.                 }
  27.                 else if (1==i&&n==j)
  28.                         {
  29.                                 i = i + 1;
  30.                                 a[i][j]=k;
  31.                         }
  32.                 else if (1 == i)
  33.                 {
  34.                         i = n;
  35.                         j = j + 1;
  36.                         if (a[i][j] != 0)
  37.                         {
  38.                                 i = 2;
  39.                                 j = j - 1;
  40.                                 a[i][j] = k;
  41.                         }
  42.                         else
  43.                         {
  44.                                 a[i][j] = k;
  45.                         }
  46.                 }
  47.                 else if (n == j)
  48.                 {
  49.                         i = i - 1;
  50.                         j = 1;
  51.                         if (a[i][j] != 0)
  52.                         {
  53.                                 i = i + 2;
  54.                                 j = n;
  55.                                 a[i][j] = k;
  56.                         }
  57.                         else
  58.                         {
  59.                                 a[i][j] = k;
  60.                         }
  61.                 }
  62.                
  63.         }
  64.         for (i = 1; i <= n; i++)
  65.         {
  66.                 for (j = 1; j <= n; j++)
  67.                 {
  68.                         printf("%3d",a[i][j]);
  69.                 }
  70.                 printf("\n");
  71.         }

  72.         return 0;
  73. }
复制代码

数组未赋值的结果

数组未赋值的结果

数组赋值的结果

数组赋值的结果


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-3 20:43:58 | 显示全部楼层
自己顶下啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-3 21:32:19 | 显示全部楼层
这是教程的代码,但是我用vs2013总是运行不了,是编译器的问题,还是什么?
  1. #include "stdio.h"
  2. void main ()
  3. {
  4.         int a[16][16],i,j,k,p,n;
  5.         p=1;
  6.         while (1==p)
  7.         {
  8.                 printf ("enter n (n=1 to 15):");
  9.                 p=0;
  10.         }
  11.         for (i=1;i<=n;i++)
  12.         {
  13.                 for (j=1;j<=n;j++)
  14.                 {
  15.                         a[i][j]=0;
  16.                 }
  17.         }
  18.         j=n/2+1;
  19.         a[1][j]=1;
  20.         for (k=2;k<=n*n;k++)
  21.         {
  22.                 i=i-1;
  23.                 j=j+1;
  24.                 if ((i<1)&&(j>n))
  25.                 {
  26.                         i=i+2;
  27.                         j=j-1;
  28.                 }
  29.                 else
  30.                 {
  31.                         if (i<1)
  32.                         {
  33.                                 i=n;
  34.                         }
  35.                         if (j>n)
  36.                         {
  37.                                 j=1;
  38.                         }
  39.                 }
  40.                 if (a[i][j]==0)
  41.                 {
  42.                         a[i][j]=k;
  43.                 }
  44.                 else
  45.                 {
  46.                         i=i+2;
  47.                         j=j-1;
  48.                         a[i][j]=k;
  49.                 }
  50.         }
  51.         for (i=1;i<=n;i++)
  52.         {
  53.                 for (j=1;j<=n;j++)
  54.                 {
  55.                         printf ("%5d",a[i][j]);
  56.                 }
  57.                 printf ("\n");
  58.         }
  59. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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