• 回形矩阵,1160蛇形矩阵打印


    /p

    1160 蛇形矩阵

    题目描述 Description

    小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.

    输入描述 Input Description

    n(即n行n列)

    输出描述 Output Description

    n+1行,n行为组成的矩阵,最后一行为对角线数字之和

    样例输入 Sample Input

    3

    样例输出 Sample Output

    5 4 3
    6 1 2
    7 8 9
    25


    解题思路:
     由于打印顺序和矩阵的数字方式不一致,因此有A、B两种思路:
    A、设立数组,模拟创建蛇形(回形)矩阵的方式,将数据填入数组中,最后打印出来
    即以矩阵中心为出发点:依次右移1格,上移1格,左移2格,下移2格,右移3格,上移3格,左移4格,下移4格······
    因此用0、1、2、3分别代表方向,代码中用了dir%4来表示方向(dir记录已经经历了多少次方向的变换),d=(dir+2)/2来表示某个方向需要移动的格数
    num来记录某个方向已经移动的格数
          程序步骤:
         1、输入行数n,计算出填写的最大数字n*n
         2、for循环对每个数字i,计算出在矩阵中的位置
               即根据A中规律来计算
              判断是否为对角线上元素,则累加
         3、循环输出矩阵
    #include<iostream>
    #include<iomanip>
    using namespace std;
    int a[100][100];
    int main()
    {
        int n;
        while(cin>>n)
        {
            int dir = 0, d = (dir + 2) / 2;
            int num = 0, s = 1;
            int x = (n - 1) / 2, y = x;
            a[x][y] = 1;
            for(int i = 2; i <= n * n; i++)
            {//计算i的位置,并填入 
                switch(dir % 4)
                {
                    case 0: y++;//右移一格 
                            break;
                    case 1: x--;//上移 
                            break;
                    case 2: y--;//左移 
                            break;
                    case 3: x++;//下移 
                            break;
                    default: break;
                }
                a[x][y] = i;num++;
                if(x == y || x + y == n-1)
                   s+=a[x][y];
                if(num == d)
                {//改变状态 
                    dir++;
                    d = (dir + 2) / 2;
                    num = 0;
                }
            }
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < n; j++)
                   cout<<setw(6)<<a[i][j];
                cout<<endl;
            }
            cout<<s<<endl;
        }
    }

    结果如下:


    B、不用数组存储,根据行号和列号直接计算出相关的数字并打印(解题代码稍后补充)

  • 相关阅读:
    shell脚本编程-重定向
    web安全-剖析_基础构架剖析
    shell脚本编程-函数
    shell脚本编程-循环
    web安全-入侵基础
    shell脚本编程-检查和测试
    shell脚本编程-特殊字符
    shell脚本编程-计算方式
    python例子-抓取网站IP列表
    linux问题-APR not Found
  • 原文地址:https://www.cnblogs.com/denghui666/p/7708706.html
Copyright © 2020-2023  润新知