• Problem E: 4*4矩阵填充


    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;
            }
        }
    }
     

    1. #include <stdio.h>
    2. #include <string.h>
    3. void tianchong(int x, int y, char str[4][4]);
    4. int main()
    5. {
    6. int n;
    7. scanf("%d", &n);
    8. for(int a = 0; a < n; a++)
    9. {
    10. getchar();
    11. char str[4][4];
    12. for(int i = 0; i < 4; i++)
    13. {
    14. scanf("%s", str[i]);
    15. }//连续的字符串读入
    16. int str2[16][2];
    17. int k = 0;
    18. for(int i = 0; i < 4; i++)
    19. {
    20. for(int j = 0; j < 4; j++)
    21. {
    22. if(str[i][j] == '*')
    23. {
    24. str2[k][0] = i;
    25. str2[k][1] = j;
    26. k++;
    27. }
    28. }
    29. }
    30. for(int i = 0; i < k; i++)
    31. {
    32. tianchong(str2[i][0], str2[i][1], str);
    33. }
    34. printf("Case #%d:\n", a + 1);
    35. for(int i = 0; i < 4; i++)
    36. {
    37. for(int j = 0; j < 4; j++)
    38. {
    39. printf("%c", str[i][j]);
    40. }
    41. printf("\n");
    42. }
    43. printf("\n");
    44. }
    45. return 0;
    46. }
    47. void tianchong(int x, int y, char str[4][4])
    48. {
    49. for(int k = 1; k <= 4; k++)
    50. {
    51. int count = 0;
    52. for(int i = 0; i <= 3; i++)
    53. {
    54. if(str[x][y] - '0' == k)
    55. continue;
    56. if(str[x][i] - '0' == k)
    57. {
    58. count++;
    59. }
    60. if(str[i][y] - '0' == k)
    61. {
    62. count++;
    63. }
    64. }
    65. if(count == 0)
    66. {
    67. str[x][y] = k + '0';
    68. break;
    69. }
    70. }
    71. }

  • 相关阅读:
    Pulsar中游标的工作原理
    短出行日渐成熟,电动两轮车迎来下半场
    研发中台拆分过程的一些心得总结
    UniApp文件上传(SpringBoot+Minio)
    YOLOv5全面解析教程②:如何制作训练效果更好的数据集
    JAVA总结01
    独立产品灵感周刊 DecoHack #030 - iOS16正式发布
    什么是LRU算法
    赞叹AI的力量-TopazLabs 全家桶使用经历
    文件上传漏洞总结
  • 原文地址:https://blog.csdn.net/QQ3503814312/article/details/125565915