打印

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

[复制链接]
4355|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 | 只看该作者
这个版人气不旺,我到别的版问问。结帖给分。

使用特权

评论回复
5
heesan| | 2010-4-14 20:04 | 只看该作者
按键标识可以啊,按下第一个键后第二个键的位置就只有8种情况,再按第三个的就6种情况了,此外的都不行

使用特权

评论回复
6
frongzs| | 2010-4-20 15:17 | 只看该作者
简单,假如是矩阵式的按键。三个按键:1,2,3.
判断1 ,2,3三个按键的X,Y坐标,X坐标有且只有2个相同,Y坐标也有且只有两个相同,那么就是成立。

如果不是矩阵式的。你自己先把按键排列编好序号,然后就算出X,Y就行。

使用特权

评论回复
7
lao5hua| | 2010-4-20 16:59 | 只看该作者
简单是简单,但人家也没说是3个按键;可采用循环查询方式:
若检测到某按键A按下,则查询其同列也有按键按下,没有退出循环检测下一个按键;
有,则再检测A的同行是否有按键按下,没有退出循环检测下一个按键;
有,则成立。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
流行音乐 + 1
8
iC921| | 2010-4-22 15:16 | 只看该作者
矩阵的情况有什么限制----纵横各多少点?

使用特权

评论回复
9
292302877| | 2010-8-15 16:46 | 只看该作者
路过,学习

使用特权

评论回复
10
wzf3151| | 2010-8-17 10:49 | 只看该作者
硬件问题,不可识别。键位冲突。


可以在百度或者google上搜索键位冲突

使用特权

评论回复
11
610095871| | 2010-10-25 10:38 | 只看该作者
学习了

使用特权

评论回复
12
china_sn0w| | 2011-1-28 20:44 | 只看该作者
标记下,思考几天……

使用特权

评论回复
13
流行音乐|  楼主 | 2011-1-29 12:22 | 只看该作者
7楼的方法可行。应该还有更简单的方法,不用逐一判断每一个按键。

使用特权

评论回复
14
yyql008| | 2011-2-23 15:35 | 只看该作者
按下的键比较多的话,感觉这个方法好点
先扫描第一列,看是否该列有2个或者2个以上的按键被按下,如果没有则扫描下一列,全部列扫描完,都没有的话,则答案是"否"

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

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
流行音乐 + 1
15
achingscar| | 2011-3-27 01:37 | 只看该作者
支持一下

使用特权

评论回复
16
xiaoke515| | 2011-4-12 14:15 | 只看该作者
有趣

使用特权

评论回复
17
arab| | 2011-4-29 13:25 | 只看该作者

使用特权

评论回复
18
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
19
草原飞狼| | 2011-5-18 22:23 | 只看该作者
学习一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

375

帖子

1

粉丝