由内向外的螺旋矩阵

/*
方法:螺旋矩阵其实都可以从起始点(或者叫做最小点开始)赋值开始,然后观察每次向右移,向下,向左,向上,向右分别进行了n次赋值,之后的循环都是要n - 2
3
7 8 9
6 1 2
5 4 3


5
21   22   23   24   25
20   7    8    9    10
19   6    1    2    11
18   5    4    3    12
17   16   15   14   13
经过观察,大概有以下的规律:
n为阶数,a[n][n]为该矩阵
a[floor(n/2)][floor(n/2)]为首位,要循环的次数为n/2,圈数circle为2
1.向右移动1格(赋值)
2.向下移circle - 1格(分别赋值)
3.向左移circle - 1格(分别赋值)
4.向上移circle - 1格(分别赋值)
5.向左移circle - 1格(分别赋值)
circle += 2;
以1为(0,0)点,建立平面坐标系,求f(x,y)
*/






#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    while(1)
    {
    int n;
    cout << "Please input odd number" << endl;
    while(cin >> n && n % 2 == 0)
    {
        cout << "Please input odd number" << endl;
    }
    int a[n][n];
    int circle = 2 , row = n / 2 , col = n / 2 , range = n / 2;
    a[row][col] = 1;
    int i = 1;


    while(range)
    {
        i = i + 1;
        col = col + 1;
        a[row][col] = i;


        for(int j = 0;j < circle - 1;j ++)
        {
            i = i + 1;
            row = row + 1;
            a[row][col] = i;
        }


        for(int j = 0;j < circle;j ++)
        {
            i = i + 1;
            col = col - 1;
            a[row][col] = i;
        }


        for(int j = 0;j < circle;j ++)
        {
            i = i + 1;
            row = row - 1;
            a[row][col] = i;
        }


        for(int j = 0;j < circle;j ++)
        {
            i = i + 1;
            col = col + 1;
            a[row][col] = i;
        }
        circle = circle + 2;
        range = range - 1;
    }
    for(int j = 0;j < n;j ++)
    {
        for(int k = 0;k < n;k ++)
     {
        cout << left << setw(5) << a[j][k] ;
     }
     cout << endl;
    }
    }
     return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值