#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;
#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;
}
当输入要显示的正方形的行是多少行时,敲回车 得到如下结果