用C语言编写给出一个4*4的矩阵,在矩阵中填入数字1,2,3,4,使得每行、每列的数字不重复,而且左上角、右上角、左下角、右下角的2*2小矩阵的4个数字不重复。输入包含多组测试数据。第一行为一个整数T(1<=T<=10),表示有T组测试数据。 第二行开始为T组测试数据。首先输出一行“Case #x:”,x表示第i组测试数据。 然后输出填充的4*4矩阵。每组测试数据之间输出一个空行。
时间: 2024-03-09 08:45:24 浏览: 108
C语言程序设计-在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的积,并在fun() 函数中输出
5星 · 资源好评率100%
以下是满足您要求的C语言代码:
```
#include <stdio.h>
#include <string.h>
int T;
int matrix[4][4];
void fill_matrix(int row, int col);
int check_valid(int row, int col, int num);
int main() {
scanf("%d", &T);
for (int i = 1; i <= T; i++) {
printf("Case #%d:\n", i);
memset(matrix, 0, sizeof(matrix));
fill_matrix(0, 0);
printf("\n");
}
return 0;
}
void fill_matrix(int row, int col) {
if (row == 4) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return;
}
for (int i = 1; i <= 4; i++) {
if (check_valid(row, col, i)) {
matrix[row][col] = i;
if (col == 3) {
fill_matrix(row + 1, 0);
} else {
fill_matrix(row, col + 1);
}
matrix[row][col] = 0;
}
}
}
int check_valid(int row, int col, int num) {
for (int i = 0; i < col; i++) {
if (matrix[row][i] == num) {
return 0;
}
}
for (int i = 0; i < row; i++) {
if (matrix[i][col] == num) {
return 0;
}
}
if (row >= 2 && col >= 2) {
if (matrix[row-2][col-2] == num || matrix[row-2][col-1] == num ||
matrix[row-1][col-2] == num || matrix[row-1][col-1] == num) {
return 0;
}
}
if (row >= 2 && col <= 1) {
if (matrix[row-2][col] == num || matrix[row-2][col+1] == num ||
matrix[row-1][col] == num || matrix[row-1][col+1] == num) {
return 0;
}
}
if (row <= 1 && col >= 2) {
if (matrix[row][col-2] == num || matrix[row][col-1] == num ||
matrix[row+1][col-2] == num || matrix[row+1][col-1] == num) {
return 0;
}
}
if (row <= 1 && col <= 1) {
if (matrix[row][col] == num || matrix[row][col+1] == num ||
matrix[row+1][col] == num || matrix[row+1][col+1] == num) {
return 0;
}
}
return 1;
}
```
以上代码通过递归方式填充矩阵,并通过check_valid函数检查每个位置是否可以填入数字。其中check_valid函数根据题目要求,检查行、列、以及2*2小矩阵中是否有重复数字。
阅读全文