喜欢竞赛和挑战的朋友来尝试下这个题目
如何判断矩阵键盘中是否存在“位于任意某个矩形的四个角上的按键至少有三个按键被按下”?
下面举几个“是”的例子:
1:
x x x x o x
x x x x x x
x o x x o x
x x x x x x
2:
x x x x x x
x x o x x x
x o o x x x
x x x o x x
3:
x x x x x x
x o x o x x
x o x x x x
x x x x o x
下面举几个“否”的例子:
4:
x x x x x x
x x x x x x
x o o o o x
x x x x x x
5:
x x x x x x
x x o o x x
x o x x o x
x x x x x x
6:
x x x x o x
x x x o x x
x o o x x x
x x x x x x
可以这样:
就按照上面的举例来说吧:4*6
每行扫描的结果存放在一个变量中,记为r1,r2,r3,r4 。如果按下则相应bit置为1,否则为0.
x x x x x x
x x o x x x
x o o x x x
x x x o x x
则上图中即为r1= 0(h) r2 = 8(h) r3=18(h) r4=4(h)
检测这四个变量中1的个数是否大于等于2,如果满足则将这个变量和其他变量“位与”,如果结果有不为0的,则最后结果为“是”。否则为“否”。如此循环到最后一行就可以得到最后的结果了。
上例中r3中的1个数为2.则r3与r1“位与”的结果为0;r3与r2“位与”的结果为1,因此已经搜索到,直接跳出来,结果为“是”。