#include<iostream>
#include<iomanip>
using namespace std;
void main01();//螺旋数组顺时针
void main02();//螺旋数组逆时针
void main()
{
main01();
main02();
}
void main01()//螺旋数组顺时针
{
int n;
cin >> n;
int **p = new int*[n];//生成动态二维数组
for (int i = 0; i < n; i++)
{
int *k = new int[n];
p[i] = k;
};
int temp = n, lie = 0, hang = 0, start = 1;
int count = 0;
while (count < n / 2)
{
while (lie < temp - 1)
{
*(p[hang] + lie) = start++; //上排赋值
lie++;
}
while ( hang < temp - 1)
{
*(p[hang] + lie) = start++;右排赋值
hang++;
}
while (lie > count)
{
*(p[hang] + lie) = start++;下排赋值
lie--;
}
while (hang>count)
{
*(p[hang] + lie) = start++;左派赋值
hang--;
}
hang++;
temp--;
start -= 1;
count++;
}
if (n % 2 != 0)
{
*(p[hang] + lie+1) = start + 1;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << setw(5) << *(p[i] + j);
}
cout << endl;
}
};
void main02()//螺旋数组逆时针
{
int n;
cin >> n;
int **p = new int*[n];
for (int i = 0; i < n; i++)
{
int *k = new int[n];
p[i] = k;
};
int temp = n, lie = 0, hang = 0, start = 1;
int count = 0;
while ( count < n / 2)
{
while (hang< temp - 1)
{
*(p[hang] + lie + 1) = start++;//左排赋值
hang++;
}
while (lie < temp - 1)
{
*(p[hang] + lie + 1) = start++;//下排赋值
lie++;
}
while ( hang>count)
{
*(p[hang] + lie + 1) = start++;//右排赋值
hang--;
}
while (lie>count)
{
*(p[hang] + lie + 1) = start++;//上排赋值
lie--;
}
hang++;
lie++;
temp--;
count++;
}
if (n % 2 != 0)
{
*(p[hang] + lie + 1) = start;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << setw(5) << *(p[i] + j + 1);
}
cout << endl;
}
}
脑壳痛!!!!呜~~~