您的位置:首页 > 编程语言 > C语言/C++

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

2016-04-04 10:26 525 查看
#include "stdafx.h"

#include<iostream>

using namespace std;

#define N 100

struct point{

int xx;

int yy;

};

class masterray{//蛇形矩阵

private:

int matrix

;

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;

}

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: