跟程序关系不大,就是简单的数学题,根据 行号、列号 求其值。

程序代码:
#include <stdio.h>
void foo( unsigned row, unsigned col, unsigned base, const char* fmt )
{
for( unsigned i=0; i!=row*col; ++i )
{
unsigned T = i/col;
unsigned B = row-1-T;
unsigned L = i%col;
unsigned R = col-1-L;
unsigned v;
#define bar(row,col,t,l,base) (2*(row)*(t) + 2*(col)*(t) - 4*(t)*(t) + (l)-(t) + (base))
if( T<=B && T<=L && T<=R ) // →
v = bar( row, col, T, L, base );
else if( R<=T && R<=B && R<=L ) // ↓
v = bar( col, row-1, R, T-1, base+col );
else if( B<=T && B<=L && B<=R ) // ←
v = bar( row-1, col-1, B, R-1, base+col+row-1 );
else if( L<=T && L<=B && L<=R ) // ↑
v = bar( col-1, row-2, L, B-1, base+2*col+row-2 );
#undef bar
printf( fmt, v );
putchar( " \n"[R==0] );
}
}
int main( void )
{
foo( 5, 4, 1, "%02u" );
foo( 5, 5, 1, "%02u" );
foo( 5, 6, 1, "%02u" );
foo( 7, 11, 1, "%02u" );
foo( 17, 9, 1, "%03u" );
}