Leecode刷题C语言之判断国际象棋棋盘中一个格子的颜色

时间:2024-12-11 07:16:09

 执行结果:通过

执行用时和内存消耗如下:

 

 

 

代码如下 :

bool squareIsWhite(char* s) {
    return s[0] % 2 != s[1] % 2;
}

解题思路: 

这段代码的目的是判断一个给定的字符串 s 所表示的棋盘上的格子是否为白色。这里假设字符串 s 的前两个字符分别表示格子的横纵坐标(可能是以某种方式编码的数字或字符,但在这段代码中直接作为整数处理,这在实际应用中可能是一个简化或假设),并且棋盘是一个标准的8x8国际象棋棋盘,其中白色和黑色格子交替出现。

国际象棋棋盘的布局特点是:

  • 8x8的格子
  • 白色和黑色格子交替排列
  • 在一个标准的8x8棋盘上,如果横纵坐标的和是偶数,则该格子是黑色;如果和是奇数,则该格子是白色。
  1. 取模运算s[0] % 2 和 s[1] % 2 分别计算字符串 s 的第一个字符和第二个字符所代表的整数值除以2的余数。在C语言中,字符可以通过ASCII值进行算术运算,这里假设这些字符能够直接转换为整数,并且它们的值在模2运算下有意义(即,能够区分奇偶性)。

  2. 比较余数!= 运算符比较两个余数是否不相等。

    • 如果 s[0] % 2 和 s[1] % 2 的结果不相等,说明一个字符代表的数是奇数,另一个字符代表的数是偶数。
    • 在标准的8x8棋盘上,当一个格子的横坐标是奇数且纵坐标是偶数(或反之)时,该格子是白色的。这是因为白色格子总是出现在奇数行与偶数列(或偶数行与奇数列)的交叉点上。
  3. 返回值:根据余数是否不相等,函数返回 true 或 false。如果余数不相等,表示该格子是白色的,函数返回 true;如果余数相等,表示该格子是黑色的(或不符合白色格子的条件),函数返回 false

综上所述,这段代码的思路是通过判断横纵坐标(以字符形式给出,但直接作为整数处理)的奇偶性是否不同来确定一个棋盘上的格子是否为白色。这种方法利用了国际象棋棋盘上白色和黑色格子交替排列的特性,特别是白色格子总是出现在奇数行与偶数列或偶数行与奇数列的交叉点上。