zoukankan      html  css  js  c++  java
  • C++_学习笔记_奇数幻方

    先创建一个每个元素为0的空二维数组,用xy表示当前所在点的索引值。

    然后用斜向法,从起点开始向右上找位置,x--y++如果位置的索引超出范围要进行修改。

    索引值修改完成后检查该位置是否是0,也就是是否已经被填过了。如果没填过就把0改成相应的数字,如果填过了就先回滚到本次循环开始时的xy值,并且下移一个单位,也就是x++。然后填数字。

    循环完成后把幻方打印出来。

    代码及测试结果如下:

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 
     5 void showMS(vector<vector<int>> v) {
     6     //用来打印幻方的方法
     7     int length = v.size();
     8     cout << "-";
     9     for (int i = 0; i < length; i++) {
    10         cout << "----";
    11     }
    12     cout << endl;
    13     for (int i = 0; i < length; i++) {
    14         for (int j = 0; j < length; j++) {
    15             cout << "|";
    16             cout.width(3);
    17             cout << v[i][j];
    18         }
    19         cout << "|" << endl<<"-";
    20         for (int k = 0; k < length; k++) {
    21             cout << "----";
    22         }
    23         cout << endl;
    24     }
    25 }
    26 
    27 vector<vector<int>> makeEmptyMS(int n) {
    28     //用来创建一个大小为n*n的空幻方的方法
    29     vector<int> temp;
    30     vector<vector<int>> x;
    31     for (int i = 0; i < n; i++) {
    32         temp.push_back(0);
    33     }
    34     for (int i = 0; i < n; i++) {
    35         x.push_back(temp);
    36     }
    37     return x;
    38 }
    39 
    40 vector<vector<int>> makeMS(vector<vector<int>> &v) {
    41     //对空幻方进行填值的方法
    42     int length = v.size();
    43     int mid = length/2;//幻方中间行/列的索引值
    44     int x = 0,y=mid;//第一个元素的索引值
    45     v[x][y] = 1;
    46     for (int i = 2; i < length * length+1; i++) {
    47         int temp_x = x;
    48         int temp_y = y;
    49         x--;
    50         y++;
    51         if (x < 0)
    52             x = length - 1;
    53         if (y > length - 1)
    54             y = 0;
    55         if (v[x][y] == 0) {
    56             v[x][y] = i;
    57         }
    58         else {
    59             x=temp_x;
    60             y=temp_y;//回滚
    61             x++;
    62             if (x < 0)
    63                 x = length - 1;
    64             if (y > length - 1)
    65                 y = 0;
    66             v[x][y] = i;
    67         }
    68     }
    69     return v;
    70 }
    71 int main() {
    72     cout.setf(std::ios::left);
    73     vector<vector<int>> a;
    74     int n;
    75     cout << "input the size of magicSquare:" << endl;
    76     cin >> n;
    77     a = makeEmptyMS(n);
    78     a = makeMS(a);
    79     showMS(a);
    80 }

     

  • 相关阅读:
    internet信息服务(iis)无法删除的解决方法
    JQuery和ASP.NET分别实现级联下拉框效果
    解决为应用程序池 提供服务的进程关闭时间超过了限制
    VS2015|Visual Studio Enterprise 2015简体中文版(企业版)
    ASP.NET MVC 4 (十) 模型验证
    基于.NET平台常用的框架整理
    业务逻辑层的设计(三)——事务的考虑
    业务逻辑层的设计(二)——让领域模型支持验证
    业务逻辑层的设计(一)——逻辑是谁的职责
    添加<!doctype html>后造成JS写的定位失效
  • 原文地址:https://www.cnblogs.com/reluctante1/p/12732490.html
Copyright © 2011-2022 走看看