鱼C论坛

 找回密码
 立即注册
查看: 2644|回复: 1

魔方阵的代码 哪里有问题

[复制链接]
发表于 2022-11-2 16:09:31 | 显示全部楼层 |阅读模式

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

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

x
求助魔方阵的代码哪里出现问题了,要求魔方阵的每一行和每一列和对角线之和都一样,红宝书第六zhang kehouxiti
#include <stdio.h>
#include <math.h>
int main(void)
    {  int a[15][15],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[i][j] = 0;   
            }
        j = n/2+1;
        i = 1;
        a[1][j]=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[i][j]>0) || (i<1 && j>n))
            {
              i = i + 2;
              j = j - 1;   
            }
          a[i][j] = k;  
          }
         
        for (i=1;i<=n;i++)
          {for(j=1;j<=n;j++)
            printf("%10d",a[i][j]);
          printf("\n");
          }
      break;}
   
    else
      {
        printf("请重新输入1-15以内的奇数");
      }
    }
   
    return 0;
    }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-2 17:03:37 | 显示全部楼层
解决了 两个问题  第一个是最开始15方阵忘了都赋值0,第二个就是if else逻辑上有一些问题,调整了下顺序就好了,代码如下:
#include <stdio.h>
#include <math.h>
int main(void)
    {
    int a[15][15]={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[i][j] = 0;   
            }
        j = n/2+1;
        i = 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("%4d",a[i][j]);
            }
            printf("\n");
          }
  
    return 0;
    }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 11:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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