#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int m=0, n=0, k=0; int* res = NULL; int i=0, j=0; scanf("%d %d %d", &n, &m, &k); if (k<m || k<n) { // 总数小于行列数中任意值则无法摆放 printf("-1"); } else { res = (int*)malloc(sizeof(int)*n*m); memset(res, 0, sizeof(int)*n*m); if (m == n) { // 行列相等 for (i=0; i<m; ++i) { res[i*m+i] = 1; // 对角线填1 k--; // 每填一个总数减1 } } else if (m > n) { // 列大于行 for (i=0; i<n; ++i) { res[i*m+i] = 1; // 对角线填1 k--; // 每填一个总数减1 } for (i=n; i<m; ++i) { res[i] = 1; // 剩下的列,每列第一个填1 k--; // 每填一个总数减1 } } else { // 行大于列 for (i=0; i<m; ++i) { res[i*m+i] = 1; // 对角线填1 k--; // 每填一个总数减1 } for (i=m; i<n; ++i) { res[i*m] = 1; // 剩下的行,每行第一个填1 k--; // 每填一个总数减1 } } if (k != 0) { // 都填完如果还有剩下的 res[0] += k; // 全都累加到第一行第一列 } else {} for (i=0; i<n; ++i) { // 输出 for (j=0; j<m; ++j) { printf("%d ", res[i*m+j]); } printf("\n"); } } return 0; }