控制台-cmd 2023-08-10 18:33 采纳率: 33.3%
浏览 6
已结题

谁能解释一下(标签-c++)

谁能解释一下这是什么现象:
题目:

魔幻方阵

时间限制:0秒 内存限制:0M

题目描述

行数等于列数的矩阵又被称为方阵。现有一个奇数n,要求把1~nn之间(包含1和nn)的正整数变成n行的方阵,并且方阵中的每行,每列和主副对角线上的数字之和都相同。

输入描述

输入一个奇数n,n是正整数,且小于20。

输出描述

输出n行,每行n个正整数,构成这个方阵。

样例

输入

 5

输出

    17   24    1    8   15
    23    5    7   14   16
    4    6   13   20   22
    10   12   19   21    3
    11   18   25    2    9

代码①:

#include<iostream>
#include<iomanip>

using namespace std;

int main(){
    int n,i=1,j=(n+1)/2,x,y,box[21][21]={0};
    cin>>n;
    box[i][j]=1;
    for(int a=2;a<=n*n;a++){
        if(i==1){
            x=n;
        }
        else{
            x=i-1;
        }
        if(j==n){
            y=1;
        }
        else{
            y=j+1;
        }
        if(box[x][y]==0){
            box[x][y]=a;
            i=x;
            j=y;
        }
        else{
            i++;
            box[i][j]=a;
        }
    }
    for(int a=1;a<=n;a++){
        for(int b=1;b<=n;b++){
            cout<<setw(5)<<box[a][b];
        }
        cout<<"\n";
    }
    
    return 0;
}

结果输出了:

    8   15   22   24    6
   14   21   23    5    7
   20    0    4   11   13
    0    3   10   12   19
    2    9   16   18   25

改了下i和j定义的位置:

#include<iostream>
#include<iomanip>

using namespace std;

int main(){
    int n,x,y,box[21][21]={0};
    cin>>n;
    int i=1,j=(n+1)/2;
    box[i][j]=1;
    for(int a=2;a<=n*n;a++){
        if(i==1){
            x=n;
        }
        else{
            x=i-1;
        }
        if(j==n){
            y=1;
        }
        else{
            y=j+1;
        }
        if(box[x][y]==0){
            box[x][y]=a;
            i=x;
            j=y;
        }
        else{
            i++;
            box[i][j]=a;
        }
    }
    for(int a=1;a<=n;a++){
        for(int b=1;b<=n;b++){
            cout<<setw(5)<<box[a][b];
        }
        cout<<"\n";
    }
    
    return 0;
}

结果……

   17   24    1    8   15
   23    5    7   14   16
    4    6   13   20   22
   10   12   19   21    3
   11   18   25    2    9

竟然对了!
谁能解释一下

  • 写回答

2条回答 默认 最新

  • [PE]经典八炮 2023-08-10 20:53
    关注

    你得先输入n再用n的值啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月20日
  • 已采纳回答 8月12日
  • 创建了问题 8月10日

悬赏问题

  • ¥15 (标签-考研|关键词-set)
  • ¥15 求修改代码,图书管理系统
  • ¥15 请问有没求偏多标签数据集yeast,reference,recreation,scene,health数据集。
  • ¥15 传感网应用开发单片机实训
  • ¥15 Delphi 关于sAlphaImageList使用问题
  • ¥15 寻找将CAJ格式文档转txt文本的方案
  • ¥15 shein测试开发会问些啥我是写java的
  • ¥15 关于#单片机#的问题:我有个课程项目设计,我想在STM32F103veTX单片机,M3主控模块上设计一个程序,在Keil uVision5(C语言)上代码该怎么编译?(嫌钱少我可以加钱,急急急)
  • ¥15 opnet仿真网络协议遇到问题
  • ¥15 在安装python的机器学习程序包scikit-learn(1.1版本)时遇到如下问题