设行标为i,列标为j。
根据输出样例可以看出距离边界距离为d的数字为d + 1,其中d = min (i 到边界距离 , j 到边界距离 ) , 边界为0和N - 1 ,所以 i 到边界距离为min ( i , abs(i - ( N - 1 )),j 到边界距离同理。
具体代码如下:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int a[110][110];
int main()
{
int N;
cin >> N;
while (N)
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
int d = min(min(i , abs(i - (N - 1) )) , min(j , abs(j - (N - 1) )) );
cout << d + 1 << ' ';
}
cout << endl;
}
cout << endl;
cin >> N;
}
return 0;
}