#include <vector>
#include <iostream>
using namespace std;
class circle_number
{
public:
void show();
void sequence();
circle_number(int);
protected:
vector<vector<int>> vec;
int num, loop, range, cur_number=0;
};
int main(int argc, char* argv[])
{
int lim=10;
if ( argc > 1 ) lim=stoi(argv[1]);
circle_number number(lim);
number.sequence();
number.show();
return 0;
}
circle_number::circle_number(int n)
{
num=n;
range=num-1;
loop=num%2?(num+1)/2:num/2;
vec.assign(num, vector<int>());
for (int i=0; i!=num; ++i)
vec[i].assign(num,0);
}
void circle_number::show()
{
for(int row=0; row!=num; ++row)
{
for (int col=0; col!=num-1; ++col)
cout<<vec[row][col]<<" ";
cout<<vec[row][num-1]<<endl;
}
}
void circle_number::sequence()
{
for(int i=0; i!=loop; ++i)
{
int len=i;
int row=i;
int k=num-2*i;
int up=cur_number;
int down=(k == 1)?up:cur_number+k;
for(int p=0; p<k-2; ++p)
vec[++row][range-len]=++down;
for(int j=0; j!=k; ++j,++len)
{
vec[i][len]=++up;
vec[range-i][range-len]=++down;
}
for(int d=0; d<k-2; ++d)
{
vec[range-i-d-1][i]=++down;
}
cur_number=down;
}
}
转载于:https://blog.51cto.com/expertshell/1246176