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;
}
当输入要显示的正方形的行是多少行时,敲回车 得到如下结果
#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;
}
当输入要显示的正方形的行是多少行时,敲回车 得到如下结果
相关文章推荐
- VS2005配置CPPUnit进行单元測试
- C++第2次实验作业
- 标准C++中的string类的用法总结
- C++常用特性原理解析
- 逆向随笔 - strcat函数的实现和分析
- 自动化编译C/C++程序脚本
- 【C++ Primer plus】【第十一章】使用类
- c语言进行数据的多输入多输出
- c++显式加载dll并使用DLL的类
- 基于DEV的命令行调试
- C++中关于new及内存地址的思考
- c语言实现简单的文本文件加密 ---初试
- C++ dll的隐式与显式调用
- 在C++中调用DLL中的函数
- 调查:Java程序员最伤心,C++程序员最年老
- C++浓缩(六)
- C中scanf()返回值问题
- 如何在win8/8.1上安装Visual C++ 6.0
- c语言中二维数组的思考
- C++ 顺序队列与循环队列