奇数阶魔方阵问题

    奇数阶魔方阵是指由1到n2(n为奇数)个自然数构成的n*n的方阵,它的每一行,每一列,和对角线各元素之和均相等,3阶的魔方阵如下:

                           8         1          6

                           3         5          7

                           4         9          2

n阶魔方阵的构造方法为:

1>  首先把1放在顶行的正中间,然后把后继数按顺序放置在右上斜的对角线上;

2>  当到达顶行时,下一个数放到底行,好像它在顶行的上面;

3>  当到达最右列时,下一个数放在最左端列,好像它仅靠在右端列的右方;

4>  当到达的位置已经填好数时,或到达右上角的位置时,下一个数就放在刚填写的位置的正下方。

 

C++函数如下:

  1. /*奇数阶魔方阵问题*/
  2. #include<iostream>
  3. using namespace std;
  4. const int MAX=50;
  5. void main()
  6. {
  7.     int matrix[MAX][MAX];
  8.     int count;
  9.     int row;
  10.     int column;
  11.     int order;
  12.     cout<<"请输入阶数:";
  13.     cin>>order;
  14.     if(order%2==0)
  15.     {
  16.         cout<<"阶数必须是一个奇数,请重新输入!"<<endl;
  17.     } else
  18.     {
  19.        row=0;
  20.        column=order/2;
  21.        for(count=1;count<=order*order;count++)
  22.        {
  23.            matrix[row][column] = count;
  24.            if (count % order == 0)
  25.            {
  26.                row++;
  27.            }
  28.            else 
  29.            {        
  30.                row    = (row == 0) ? order - 1 : row - 1;
  31.                column = (column == order-1) ? 0 : column + 1;
  32.            }
  33.        }
  34.         for (row = 0; row < order; row++) 
  35.         {
  36.           for (column = 0; column < order; column++)
  37.           {
  38.             
  39.             cout<<"/t"<<matrix[row][column];
  40.           }
  41.          cout<<endl;
  42.         }
  43.       
  44.     }
  45.          
  46.           
  47. }

 

程序运行打印出相应的n阶魔方阵;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值