kevinde2022 发表于 2022-11-2 16:09:31

魔方阵的代码 哪里有问题

求助魔方阵的代码哪里出现问题了,要求魔方阵的每一行和每一列和对角线之和都一样,红宝书第六zhang kehouxiti
#include <stdio.h>
#include <math.h>
int main(void)
    {int a,i,j,k,p,n;
    p=1;
    while (p)
    {
    scanf("%d",&n);
    if ((n<=15)&&(n%2!=0))
      {
      for (i = 1;i<=15;i++)
          for (j= 1;i<=15;i++)
            {
             a = 0;   
            }
      j = n/2+1;
      i = 1;
      a=1;
      for (k=2;k<=n*n;k++)
          {
         i = i - 1;
         j = j + 1;
         if (i<1)
             {
               i = n;
               
             }
         
         if (j>n)
             {
               j=1;
               
             }
         
         if ((a>0) || (i<1 && j>n))
            {
            i = i + 2;
            j = j - 1;   
            }
          a = k;
          }
         
      for (i=1;i<=n;i++)
          {for(j=1;j<=n;j++)
            printf("%10d",a);
          printf("\n");
          }
      break;}
   
    else
      {
      printf("请重新输入1-15以内的奇数");
      }
    }
   
    return 0;
    }

kevinde2022 发表于 2022-11-2 17:03:37

解决了 两个问题第一个是最开始15方阵忘了都赋值0,第二个就是if else逻辑上有一些问题,调整了下顺序就好了,代码如下:
#include <stdio.h>
#include <math.h>
int main(void)
    {
    int a={0},i,j,k,p,n;
    p=1;
    while (p)
    { printf("请输入1-15以内的奇数");
    scanf("%d",&n);
    if ((n<=15)&&(n%2!=0)) p = 0;
    }
      
      for (i = 1;i<=n;i++)
          for (j= 1;i<=n;i++)
            {
             a = 0;   
            }
      j = n/2+1;
      i = 1;
      a=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 == 0)
            a = k;
            else
            {
                i = i + 2;
                j = j - 1;
                a = k;
            }
          }
      for (i=1;i<=n;i++)
          {
            for(j=1;j<=n;j++)
            {
            printf("%4d",a);
            }
            printf("\n");
          }

    return 0;
    }
页: [1]
查看完整版本: 魔方阵的代码 哪里有问题