c++ 版的蛇形矩阵,正方形的,从数字1开始逐渐增大,呈回字形

#include "stdafx.h"
#include<iostream>
using namespace std;
#define N 100
struct point{
    int xx;
    int yy;
};
class masterray{//蛇形矩阵
private:
    int matrix[N][N];
    int x;
    int y;
    int posX;
    int posY;
    int value;
public:
    masterray(){}
    masterray(int n, int m){
        x = n;
        y = m;
        posX = 0;
        posY = 0;
        fun();
    }
    point getPoint(int v, int n, int m);//找出v在蛇形矩阵n*m中的位置
    void fun();//蛇形矩阵的小算法
    void display();//输出蛇形矩阵
    ~masterray(){}
};
void masterray::display(){
    for(int i=0; i<x; i++){
        for(int j=0; j<y; j++){
            printf("%3d ",matrix[i][j]);
        }
        cout<<endl;
    }
}
point masterray::getPoint(int v, int n, int m){
        point p;
        value = v;
        x = n;
        y = m;
        posX = 0;
        posY = 0;
        fun();
        p.xx = posX;
        p.yy = posY;
        //cout<<"Point("<<p.xx<<","<<p.yy<<")"<<endl;
        return p;
}


void masterray::fun(){
    int x0=0,xn=x;
    int y0=0,ym=y;
    int num = 1;
int i,j;
    while(x0<xn || y0<ym && num<x*y){
        for(j=y0; j<ym;j++){
            if(num==value) posX=x0+1,posY=j+1;
            if(num<=x*y) matrix[x0][j] = num++;
        }
        for(i=x0+1; i<xn; i++){
            if(num==value) posX=i+1,posY=ym;
            if(num<=x*y) matrix[i][ym-1] = num++;
        }
        for(j=ym-2; j>y0; j--){
            if(num==value) posX=xn,posY=j;
            if(num<=x*y) matrix[xn-1][j] = num++;
        }
        for(i=xn-1; i>x0; i--){
            if(num==value) posX=i+1,posY=y0+1;
            if(num<=x*y) matrix[i][y0] = num++;
        }
        x0++, y0++;
        xn--, ym--;
    }
}
int main(){
int n;
cin>>n;
    masterray m(7,11);
    //m.display();
    m.getPoint(17,n,n);
    cout<<endl;
    m.display();
return 0;

}

当输入要显示的正方形的行是多少行时,敲回车 得到如下结果



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值