算法1:找规律
#include <iostream>
using namespace std;
const int N = 110;
int g[N][N];
int main()
{
int n;
while(cin >> n ,n)
{
for(int i = 1;i <= n;i ++ )
{
for(int j = 1;j <= n;j ++ )
{
cout << min(min(i,j), min(n - i + 1,n - j + 1)) << ' ';
}
cout << endl;
}
cout << endl;
}
}
算法2:写回字
技巧:对称写法 i
, n - i + 1
#include <iostream>
using namespace std;
const int N = 110;
int g[N][N];
int main()
{
int n;
while(cin >> n ,n)
{
for(int i = 1;i <= n;i ++ )
{
for(int j = i;j <= n - i + 1;j ++ )
{
g[i][j] = g[n - i + 1][j] = i;
g[j][i] = g[j][n - i + 1] = i;
}
}
for(int i = 1;i <= n;i ++ ){
for(int j = 1;j <= n;j ++ ) cout << g[i][j] <<' ';
cout << endl;
}
cout << endl;
}
}