2013年4月27号第二题:

#include <stdio.h>
#define MAX_COL 2*100 - 1 //max column
#define MAX_ROW MAX_COL
/**
* @brief output
*
* @Param: N
*/
void output(int N)
{
int a[MAX_COL][MAX_ROW] = {0};
int col,row,i;
if( 2*N - 1 > MAX_COL )
{
printf("Please input a number between[1-199]\n");
return ;
}
/*Initialize array a*/
for(i=0; i<N; i++)
{
for(col = i,row = i; col < 2*N - 1 - i; col++)
a[row][col] = i + 1;
for(row= i,col = i; row < 2*N - 1 - i; row++)
a[row][col] = i + 1;
for(col=i,row=2*N-2-i; col < 2*N - 1 - i; col++)
a[row][col] = i+1;
for(row=i,col=2*N-2-i; row < 2*N - 1 - i; row++)
a[row][col] = i+1;
}
/*output array*/
for(row=0; row<2*N-1;row++)
{
for(col=0; col<2*N-1;col++)
printf("%2d ",a[row][col]);
printf("\n");
}
}
int main()
{
int N;
printf("Please input a number:");
scanf("%d",&N);
output(N);
return 0;
}
精简版:
#include <stdio.h>
#define MIN(x, y) ((x) > (y) ? (y) : (x))
int main()
{
int n, size, row, col, minH, minV;
printf("Please input a number: ");
scanf("%d", &n);
// 有效性检查
if (0 >= n)
{
return -1;
}
size = 2 * n - 1;
for (row = 0; row < size; ++row)
{
for (col = 0; col < size; ++col)
{
minH = MIN(row + 1, size - row);
minV = MIN(col + 1, size - col);
printf("%d ", MIN(minH, minV));
}
printf("\n");
}
return 0;
}