zoukankan      html  css  js  c++  java
  • n阶魔方阵(c++)

    魔方阵:

    1. 它是一个方阵
    2. 它的每一行、每一列、对角线之和均相等

    列如:三阶魔方阵

    8   1   6
    3   5   7
    4   9   2
    

    魔方阵算法:

    1. 数字1位于第一行的正中间
    2. 下一个数放到上一个数的右上角(即上一行下一列),若无上一行则放到最后一行,若无下一列则放到第一列
    3. 若新位置已经放了数,则将其放入上一个数的正下方(即下一行的同一列)
    4. 重复第2、3步

    代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
        int i, j, i1, j1, n, p, d[16][16];
        cout << "请输入阶数(必须是奇数):";
        while(1)//控制输入的阶数
        {
            cin >> n;
            if( n<1 || n>10 ) continue;
            if( n>1 && n%2!=0 ) break;
        }
    
        for(i=1;i<n+1;++i)//数组初始化全为0
            for(j=1;j<n+1;++j)
                d[i][j]=0;
    
        i=1;
        j=n/2+1;
        d[i][j]=1;//1位于第一行的正中间
    
        for(p=2;p<=n*n;++p)//数字2、3、……、n*n的摆放
        {
            //上一行,下一列
            i1=i;
            j1=j;
            i--;
            j++;
    
            //可能的三种情况
            if(i==0) i=n;//没有上一行的处理措施
            if(j>n) j=1;//没有下一列的处理措施
            if(d[i][j]!=0) {i=i1+1;j=j1;}//新位置已经放了数的处理措施
    
            d[i][j]=p;//摆放
        }
    
        for(i=1;i<n+1;++i)//输出魔方阵
        {
            for(j=1;j<n+1;++j)
                cout<<setw(3)<<d[i][j];
            cout<<endl;
        }
    
        return 0;
    }
    
  • 相关阅读:
    [转载] CSS模块化【封装继承多态】
    【转】jquery图片播放插件Fancybox使用方法
    指定打印宽度,左&右对其
    预测编码与帧间压缩方法
    字符串
    静态变量 static
    利用getchar, putchar复制文件
    排序
    printf 语句
    Ubuntu 宽带连接
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626183.html
Copyright © 2011-2022 走看看