请喜欢竞赛和挑战的朋友来尝试下这个题目

[复制链接]
5583|18
 楼主| 流行音乐 发表于 2010-4-2 13:45 | 显示全部楼层 |阅读模式
本帖最后由 流行音乐 于 2010-4-2 13:56 编辑

喜欢竞赛和挑战的朋友来尝试下这个题目
如何判断矩阵键盘中是否存在“位于任意某个矩形的四个角上的按键至少有三个按键被按下”?
下面举几个“是”的例子:
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
alan_mini 发表于 2010-4-6 18:08 | 显示全部楼层
楼主如果是想用软件程序来解决的话,那就用按键标志来实现,这样可以很容易的实现哦
 楼主| 流行音乐 发表于 2010-4-7 15:06 | 显示全部楼层
就是想用软件来解决。我仔细考虑过了,发现这个问题并不简单,很能考验一个人的思维能力。楼上能说一下大致的思路或算法吗?
 楼主| 流行音乐 发表于 2010-4-11 18:02 | 显示全部楼层
这个版人气不旺,我到别的版问问。结帖给分。
heesan 发表于 2010-4-14 20:04 | 显示全部楼层
按键标识可以啊,按下第一个键后第二个键的位置就只有8种情况,再按第三个的就6种情况了,此外的都不行
frongzs 发表于 2010-4-20 15:17 | 显示全部楼层
简单,假如是矩阵式的按键。三个按键:1,2,3.
判断1 ,2,3三个按键的X,Y坐标,X坐标有且只有2个相同,Y坐标也有且只有两个相同,那么就是成立。

如果不是矩阵式的。你自己先把按键排列编好序号,然后就算出X,Y就行。
lao5hua 发表于 2010-4-20 16:59 | 显示全部楼层
简单是简单,但人家也没说是3个按键;可采用循环查询方式:
若检测到某按键A按下,则查询其同列也有按键按下,没有退出循环检测下一个按键;
有,则再检测A的同行是否有按键按下,没有退出循环检测下一个按键;
有,则成立。

评分

参与人数 1威望 +1 收起 理由
流行音乐 + 1

查看全部评分

iC921 发表于 2010-4-22 15:16 | 显示全部楼层
矩阵的情况有什么限制----纵横各多少点?
292302877 发表于 2010-8-15 16:46 | 显示全部楼层
路过,学习
wzf3151 发表于 2010-8-17 10:49 | 显示全部楼层
硬件问题,不可识别。键位冲突。


可以在百度或者google上搜索键位冲突
610095871 发表于 2010-10-25 10:38 | 显示全部楼层
学习了
china_sn0w 发表于 2011-1-28 20:44 | 显示全部楼层
标记下,思考几天……
 楼主| 流行音乐 发表于 2011-1-29 12:22 | 显示全部楼层
7楼的方法可行。应该还有更简单的方法,不用逐一判断每一个按键。
yyql008 发表于 2011-2-23 15:35 | 显示全部楼层
按下的键比较多的话,感觉这个方法好点
先扫描第一列,看是否该列有2个或者2个以上的按键被按下,如果没有则扫描下一列,全部列扫描完,都没有的话,则答案是"否"

如果扫描到某一列有N个按键按下,假设是X1,X2,X3,......XN,,
再看X1所在的行是否有2个或2个以上的按键(包括X1),有则答案"是",没有的话则判断X2,X3......XN,

评分

参与人数 1威望 +1 收起 理由
流行音乐 + 1

查看全部评分

achingscar 发表于 2011-3-27 01:37 | 显示全部楼层
支持一下
xiaoke515 发表于 2011-4-12 14:15 | 显示全部楼层
arab 发表于 2011-4-29 13:25 | 显示全部楼层
zhaobear 发表于 2011-5-9 16:20 | 显示全部楼层
可以这样:
就按照上面的举例来说吧: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,因此已经搜索到,直接跳出来,结果为“是”。

大家可以按照这种方式测试一下其他情况。呵呵

评分

参与人数 1威望 +1 收起 理由
流行音乐 + 1

查看全部评分

草原飞狼 发表于 2011-5-18 22:23 | 显示全部楼层
学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

375

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部