首页 > 试题广场 >

棋子翻转

[编程题]棋子翻转
  • 热度指数:3401 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在 4x4 的棋盘上摆满了黑白棋子,黑白两色棋子的位置和数目随机,其中0代表白色,1代表黑色;左上角坐标为 (1,1) ,右下角坐标为 (4,4) 。
现在依次有一些翻转操作,要对以给定翻转坐标(x,y)(也即第x行第y列)为中心的上下左右四个棋子的颜色进行翻转。
给定两个数组 A 和 f ,分别代表 初始棋盘 和 哪些要进行翻转的位置(x,y) 请返回经过所有翻转操作后的棋盘。

例如输入[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]时,初始键盘如下图所示:
对应的输出为[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]],如下图所示:

示例1

输入

[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]

输出

[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param A int整型二维数组 
 * @param ARowLen int A数组行数
 * @param AColLen int* A数组列数
 * @param f int整型二维数组 
 * @param fRowLen int f数组行数
 * @param fColLen int* f数组列数
 * @return int整型二维数组
 * @return int* returnSize 返回数组行数
 * @return int** returnColumnSizes 返回数组列数
 */
int** flipChess(int** A, int ARowLen, int* AColLen, int** f, int fRowLen, int* fColLen, int* returnSize, int** returnColumnSizes ) {
    int B[6][6]={0};
    for(int i=1; i<5; i++)
    {
        for(int j=1; j<5; j++)
        {
            B[i][j] = A[i-1][j-1];
        }
    }
    // for(int i=0; i<6; i++)
    // {
    //     for(int j=0; j<6; j++)
    //     {
    //       printf("%d", B[i][j]);  
    //     }
    //     printf("\n");
    // }
    // printf("\n\n");
    for(int i=0; i<fRowLen; i++)
    {
        int x = f[i][0];
        int y = f[i][1];
        B[x-1][y] = !B[x-1][y]; 
        B[x+1][y] = !B[x+1][y]; 
        B[x][y-1] = !B[x][y-1]; 
        B[x][y+1] = !B[x][y+1]; 
//         printf("x=%d, y=%d\n", x,y); 
//          for(int i=0; i<6; i++)
//     {
//         for(int j=0; j<6; j++)
//         {
//           printf("%d", B[i][j]);  
//         }
//         printf("\n");
//     }
// printf("\n");
    }

    //     for(int i=0; i<6; i++)
    // {
    //     for(int j=0; j<6; j++)
    //     {
    //       printf("%d", B[i][j]);  
    //     }
    //     // printf("\n");
    // }

    // printf("\n\n");
    //////////////////////////////////////////
    for(int i=1; i<5; i++)
    {
        for(int j=1; j<5; j++)
        {
            A[i-1][j-1] = B[i][j];
        }
    }
////////////////////////////////////////////////
    // for(int i=0; i<4; i++)
    // {
    //     for(int j=0; j<4; j++)
    //     {
    //       printf("%d", A[i][j]);  
    //     }
    //     printf("\n");
    // }
////////////////////////////////////////////
    * returnSize = ARowLen;
    *returnColumnSizes = AColLen;
    return A;
    // write code here
}
这个坐标是不是反了啊

发表于 2024-08-05 21:39:37 回复(0)