Problem Description
给出一个4*4的矩阵,在矩阵中填入数字1,2,3,4,使得每行、每列的数字不重复,而且左上角、右上角、左下角、右下角的2*2小矩阵的4个数字不重复。
Input Description
输入包含多组测试数据。第一行为一个整数T(1<=T<=10),表示有T组测试数据。
第二行开始为T组测试数据。
Output Description
首先输出一行“Case #x:”,x表示第i组测试数据。
然后输出填充的4*4矩阵。每组测试数据之间输出一个空行。
Sample Input
2 **** 2341 4123 3214 *243 *312 *421 *134
Sample Output
Case #1: 1432 2341 4123 3214 Case #2: 1243 4312 3421 2134
Hint
我的想法:
1.首先建立一个四维数组,把待填充的矩阵装进去;
2.建立一个二维数组,把四维数组里面是“*”的坐标填进去;
3.建立一个填充函数,根据题目说的每行每列没有相同的元素,进行填充;
我的代码如下:
#include <stdio.h>
#include <string.h>
void tianchong(int x, int y, char str[4][4]);
int main()
{
int n;
scanf("%d", &n);
for(int a = 0; a < n; a++)
{
getchar();
char str[4][4];
for(int i = 0; i < 4; i++)
{
scanf("%s", str[i]);
}//连续的字符串读入
int str2[16][2];
int k = 0;
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
if(str[i][j] == '*')
{
str2[k][0] = i;
str2[k][1] = j;
k++;
}
}
}
for(int i = 0; i < k; i++)
{
tianchong(str2[i][0], str2[i][1], str);
}
printf("Case #%d:\n", a + 1);
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
printf("%c", str[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
void tianchong(int x, int y, char str[4][4])
{
for(int k = 1; k <= 4; k++)
{
int count = 0;
for(int i = 0; i <= 3; i++)
{
if(str[x][y] - '0' == k)
continue;
if(str[x][i] - '0' == k)
{
count++;
}
if(str[i][y] - '0' == k)
{
count++;
}
}
if(count == 0)
{
str[x][y] = k + '0';
break;
}
}
}
- #include <stdio.h>
- #include <string.h>
-
- void tianchong(int x, int y, char str[4][4]);
- int main()
- {
- int n;
- scanf("%d", &n);
- for(int a = 0; a < n; a++)
- {
- getchar();
- char str[4][4];
- for(int i = 0; i < 4; i++)
- {
- scanf("%s", str[i]);
- }//连续的字符串读入
- int str2[16][2];
- int k = 0;
- for(int i = 0; i < 4; i++)
- {
- for(int j = 0; j < 4; j++)
- {
- if(str[i][j] == '*')
- {
- str2[k][0] = i;
- str2[k][1] = j;
- k++;
- }
- }
- }
-
- for(int i = 0; i < k; i++)
- {
- tianchong(str2[i][0], str2[i][1], str);
- }
- printf("Case #%d:\n", a + 1);
- for(int i = 0; i < 4; i++)
- {
- for(int j = 0; j < 4; j++)
- {
- printf("%c", str[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- }
- return 0;
- }
- void tianchong(int x, int y, char str[4][4])
- {
- for(int k = 1; k <= 4; k++)
- {
- int count = 0;
- for(int i = 0; i <= 3; i++)
- {
- if(str[x][y] - '0' == k)
- continue;
- if(str[x][i] - '0' == k)
- {
- count++;
- }
- if(str[i][y] - '0' == k)
- {
- count++;
- }
- }
- if(count == 0)
- {
- str[x][y] = k + '0';
- break;
- }
- }
- }