您的位置:首页 > 其它

螺旋矩阵(由外自内旋转)

2013-07-22 22:13 459 查看
如矩阵:



找出规律,并打印出一个N*N的矩阵;规律就是从首坐标开始顺时针一次增大。(题目出自程序员面试宝典第三版)

注:由于觉得书上的程序比较的复杂因此使用自己的方法。

//_OUTSIDESPIN.H_
#ifndef OUTSIDESPIN_H
#define OUTSIDESPIN_H
class OutsideSpin
{
public:
OutsideSpin();
OutsideSpin(int);
void print();
void print(int);
~OutsideSpin();
private:
int n;
int **out;
};
#endif//_OUTSIDESPIN.H_
//OutsideSpin.cpp
#include<iostream>
#include"OutsideSpin.h"
using namespace std;

OutsideSpin::OutsideSpin(){}
OutsideSpin::OutsideSpin(int n):n(n)
{
out = new int *
;
for(int i=0;i<n;i++)
{
out[i] = new int
;
}
int total = 1;
int x=0,y=0;
int start=0, end =n;
while(n>0)
{
for(int i = start;i<end-1;i++)
{
out[x][y++]=total++;
}
for(int i =start;i<end-1;i++)
{
out[x++][y]=total++;
}
for(int i = start;i<end-1;i++)
{
out[x][y--]=total++;
}
for(int i = start;i<end-1;i++)
{
out[x--][y]=total++;
}
if(start==end-1)
{
out[x][y]=total;
}
start++,x++,y++;
end--;
n = n-2;
}
}
OutsideSpin::~OutsideSpin()
{
for(int i=0;i<n;i++)
{
delete[] out[i];
}
delete[] out;
}
void OutsideSpin::print(int n0)
{
cout<<"***********************结果如下****************************"<<endl;
for(int i =0;i<n0;i++)
{
for(int j=0;j<n0;j++)
cout<<out[i][j]<<"	";
cout<<endl;
}
cout<<"************************************************************"<<endl;
}

void OutsideSpin::print()
{
print(n);
}
//OutsideSpinMain.cpp
#include<iostream>
#include"OutsideSpin.h"
using namespace std;
int main()
{
do
{
cout<<"输入矩阵的维数n:"<<endl;
int n ;
cin>>n;
OutsideSpin o(n);
o.print();
}while(!std::cin.eof());
}

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