其实这个题挺坑的,如果想得太多反而不好实现,想一下,如果是一个数等于四个方向之和,最好实现的是什么,最后一个标准输出发现了,是4个0相加等于0,那么只要凑够k个符合条件的0就可以了,那么这k个符合条件的0会出现在那里呢?
观察一下,据对是在(2,2)(2,m - 1)(n - 1,2)(n - 1,m - 1)这个范围内,以保证出现4个0环绕一个0,然后,在其中选取k个符合条件的位置,再把其他位置填充为不符合条件的数字就可以了。
至于如何不符合条件,递增数列啊,这样就保证一个数周围的数一个比它小,一个比他大,这样就不能符合nice条件了。
于是,神奇的代码就这样诞生了,虽然和标准答案不一样,但是A了,啊哈哈。
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int N;
scanf ("%d",&N);
while (N--)
{
int n,m,k,i,j;
int num = 1;
scanf("%d%d%d", &n, &m, &k);
k = (n-2)*(m-2) - k;
for(i = 1; i <= n; i++)
{
printf("0");
for(j=1; j<=m-2; j++)
if(k>0)
printf(" %d",num++,k--);
else
printf(" 0");
printf(" 0\n");
}
}
return 0;
}