今天有同学去百度,带回一道面试题,和大家分享一下:
打印:
n=1
1
n=2
3 3 2
4 1 1
4 5 5
n=3
7 7 7 7 6
8 3 3 2 6
8 4 1 1 6
8 4 5 5 5
8 9 9 9 9
提供一段参考程序:
<pre name="code" class="cpp">// ConsoleApplication1.cpp: 主项目文件。
#include "stdafx.h"
#include "stdio.h"
using namespace System;
int **a;
void fun(int n,int k)
{
int i,j;
if (n > 1)
{
a[2*n-3+k][2*n-2+k]=4*n-7;//第一个数
for ( i = 2*n-4; i >= 0; i--)//最右面一列
{
a[i+k][2*n-2+k]=4*n-6;
}
for ( i = 2*n-3; i >= 0; i--)//最上面一行
{
a[0+k][i+k]=4*n-5;
}
for ( i = 1; i < 2*n-1; i++)//最左面一列
{
a[i+k][0+k]=4*n-4;
}
for ( i = 1; i < 2*n-1; i++)//最下面一行
{
a[2*n-2+k][i+k]=4*n-3;
}
fun(n-1,k+1);
}
if (n == 1)
{
a[n-1+k][n-1+k]=1;
}
}
int main(array<System::String ^> ^args)
{
int i,j,k,n;
scanf("%d",&n);
a=new int*[2*n-1];
for (i = 0; i < 2*n-1; i++)
{
a[i]=new int[2*n-1];
}
fun(n,0);
for ( i = 0; i < 2*n-1; i++)
{
for ( j = 0; j < 2*n-1; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
for (i = 0; i < 2*n-1; i++)
{
delete a[i];
}
delete a;
return 0;
}