- 浏览: 111009 次
- 性别:
- 来自: 深圳
博客专栏
-
告诉你什么是优雅的代码
浏览量:22972
最新评论
-
wfm0105:
不支持小数
告诉你什么是优雅的代码(6)------阿拉伯钱数转换为中文形式 -
wfm0105:
daisy_rainbow 写道 不懂这些数组里 ...
告诉你什么是优雅的代码(4)-----智力题的解法(答案) -
恒之疆:
无敌模式有问题
告诉你什么是优雅的代码(11)----html5 之XXOO棋 -
Shengli_fu:
...
告诉你什么是优雅的代码 -
Shengli_fu:
...
告诉你什么是优雅的代码(5)------ 百度之星也是普通人(答案)
以下智力题摘自某一帖子。在纸上画了一下之后有了答案。出于职业敏感,开始考虑如何用程序来解决。现在已经有了基本的模型和算法,就等实现。不过,这次不再急于告诉大家什么是优雅的代码,让聪明的你们先来思考一下。实现随后放出。如果帖子过快被隐藏,那么你们又错失一次学习优雅代码的机会了。好了,废话少说,大家一起动脑思考吧。
首先,建立一张二维表,如图所示:
* 中 英 法 日
* 甲
* 乙
* 丙
* 丁
某人掌握某语言则标1,不掌握则标0。则问题转化为在表的状态空间下找出符合题中约束的一张表。状态空间的数目为 16*16*16*16,这个数虽然不是天文数字,但效率显然是低下的,编程起来也异常麻烦。
不要急,我们来整理下题中纷乱的约束,重新整理如下:
甲: 会日语,会两种语言,不会法语
乙: 不会英语,会两种语言,不同时会日语和法语
丙: 会两种语言,不同时会日语和法语
丁: 不会日语,只会一种语言
全局约束:甲与丙、丙与丁不能直接交谈,乙与丙可以直接交谈,有一种语言4人中有3人都会
Ok,现在二维表的状态如下:
中 英 法 日
甲 1
乙 0
丙
丁 0
先忽略全局约束,根据各人的约束,则状态空间变为(其中c(a,b)是组合数):
(c(3,1) - 1) * (c(3,2) - 1) * (c(4,2)-1)*c(3,1) = 2*2*5*3 = 60
显然非常少了。接下来我们只要在这个状态空间下寻找出满足全局约束的状态就可以了。
就在我准备用二维数组来实现的时候,一个火花在脑中突然迸发。那就是按位与运算。我们来看下与运算:
1001&1100 = 1000 0010&0101 = 0000
看出端倪了吗?两个人如果能互相交流证明其状态按位与的结果不为0,否则则为0.
于是一个优雅的方案浮出水面:
不懂这些数组里面的值是什么意义??
int[] a = {9,5};
int[] b = {10,9};
int[] c = {5,6,9,10,12};
int[] d = {8,4,2};
补全下作者的2维图你就会明白,这些数组代表什么了
8 4 2 1
* 中 英 法 日
* 甲 0 1
* 乙 0
* 丙 0
* 丁 0
a 数组代表 甲会的语言,8+1或者4+1 ,乙丙丁 以此类推
解释不到位不要喷。
不懂这些数组里面的值是什么意义??
int[] a = {9,5};
int[] b = {10,9};
int[] c = {5,6,9,10,12};
int[] d = {8,4,2};
错了,你的丙与丁可以直接交流。代码已贴出,自己跑下。
代码已贴出。
已发。
代码已经发放过了。你来迟了。要的话我发你。
这种题锻炼脑子,
找到大学时的感觉了。
喜欢
1. 6.宴会桌旁 2. 3. 在某宾馆的宴会厅里,有4位朋友正围桌而坐,侃侃而谈。他们用了中、英、法、日4种语言。现已知: 4. 5. A.甲、乙、丙各会两种语言,丁只会一种语言; 6. 7. B.有一种语言4人中有3人都会; 8. 9. C.甲会日语,丁不会日语,乙不会英语; 10. 11. D. 甲与丙、丙与丁不能直接交谈,乙与丙可以直接交谈; 12. 13. E. 没有人既会日语,又会法语。 14. 15. 请问:甲乙丙丁各会什么语言?
首先,建立一张二维表,如图所示:
* 中 英 法 日
* 甲
* 乙
* 丙
* 丁
某人掌握某语言则标1,不掌握则标0。则问题转化为在表的状态空间下找出符合题中约束的一张表。状态空间的数目为 16*16*16*16,这个数虽然不是天文数字,但效率显然是低下的,编程起来也异常麻烦。
不要急,我们来整理下题中纷乱的约束,重新整理如下:
甲: 会日语,会两种语言,不会法语
乙: 不会英语,会两种语言,不同时会日语和法语
丙: 会两种语言,不同时会日语和法语
丁: 不会日语,只会一种语言
全局约束:甲与丙、丙与丁不能直接交谈,乙与丙可以直接交谈,有一种语言4人中有3人都会
Ok,现在二维表的状态如下:
中 英 法 日
甲 1
乙 0
丙
丁 0
先忽略全局约束,根据各人的约束,则状态空间变为(其中c(a,b)是组合数):
(c(3,1) - 1) * (c(3,2) - 1) * (c(4,2)-1)*c(3,1) = 2*2*5*3 = 60
显然非常少了。接下来我们只要在这个状态空间下寻找出满足全局约束的状态就可以了。
就在我准备用二维数组来实现的时候,一个火花在脑中突然迸发。那就是按位与运算。我们来看下与运算:
1001&1100 = 1000 0010&0101 = 0000
看出端倪了吗?两个人如果能互相交流证明其状态按位与的结果不为0,否则则为0.
于是一个优雅的方案浮出水面:
/* * A.甲、乙、丙各会两种语言,丁只会一种语言; # # B.有一种语言4人中有3人都会; # # C.甲会日语,丁不会日语,乙不会英语; # # D. 甲与丙、丙与丁不能直接交谈,乙与丙可以直接交谈; # # E. 没有人既会日语,又会法语。 * *分析 * 甲: 会日语,会两种语言,不会法语 * 乙: 不会英语,会两种语言,不同时会日语和法语 * 丙: 会两种语言,不同时会日语和法语 * 丁: 不会日语,只会一种语言 * 全局约束:甲与丙、丙与丁不能直接交谈,乙与丙可以直接交谈,有一种语言4人中有3人都会 * * 8 4 2 1 * 中 英 法 日 * 甲 1 * 乙 0 * 丙 * 丁 0 */ public class Fun { public static void main(String[] args) { int[] a = {9,5}; int[] b = {10,9}; int[] c = {5,6,9,10,12}; int[] d = {8,4,2}; boolean solved = false; for (int i = 0; i < a.length&&!solved; i++) { for (int j = 0; j < b.length&&!solved; j++) { for (int k = 0; k < c.length&&!solved; k++) { //甲与丙不能直接交谈 if((a[i]&c[k]) != 0 ) continue; //乙与丙可以直接交谈 if((b[j]&c[k]) == 0) continue; for (int l = 0; l < d.length; l++) { //丙与丁不能直接交谈 if((c[k]&d[l]) != 0) continue; //有一种语言4人中有3人都会 if((a[i]&b[j]&c[k])!=0 || (a[i]&b[j]&d[l])!=0 || (a[i]&c[k]&d[l])!=0 || (b[j]&c[k]&d[l])!=0 ){ System.out.print("甲:"); parse(a[i]); System.out.println(); System.out.print("乙:"); parse(b[j]); System.out.println(); System.out.print("丙:"); parse(c[k]); System.out.println(); System.out.print("丁:"); parse(d[l]); System.out.println(); solved = true; break; } } } } } } private static void parse(int num) { while(num!=0){ if(num >= 8){ System.out.print(" 中 "); num -= 8; } else if(num >= 4){ System.out.print(" 英 "); num -= 4; } else if(num >= 2){ System.out.print(" 法 "); num -= 2; } else{ System.out.print(" 日 "); num -= 1; } } } }
评论
16 楼
wfm0105
2016-02-04
daisy_rainbow 写道
不懂这些数组里面的值是什么意义??
int[] a = {9,5};
int[] b = {10,9};
int[] c = {5,6,9,10,12};
int[] d = {8,4,2};
补全下作者的2维图你就会明白,这些数组代表什么了
8 4 2 1
* 中 英 法 日
* 甲 0 1
* 乙 0
* 丙 0
* 丁 0
a 数组代表 甲会的语言,8+1或者4+1 ,乙丙丁 以此类推
解释不到位不要喷。
15 楼
daisy_rainbow
2015-02-27
不懂这些数组里面的值是什么意义??
int[] a = {9,5};
int[] b = {10,9};
int[] c = {5,6,9,10,12};
int[] d = {8,4,2};
14 楼
tonly85
2010-10-05
先不考虑代码,和题目逻辑。用中国人的想法,题目既然中国人出的,会的人最多的那种语言肯定是中文。
13 楼
yangguo
2010-09-26
zhao103804 写道
我只是推算出来了,并未写成程序,不知对否
甲:中日
乙:中法
丙:英法
丁:法
甲:中日
乙:中法
丙:英法
丁:法
错了,你的丙与丁可以直接交流。代码已贴出,自己跑下。
12 楼
yangguo
2010-09-26
Sweegi 写道
留言啦~到处学习学习
代码已贴出。
11 楼
Sweegi
2010-09-26
留言啦~到处学习学习
10 楼
zhao103804
2010-09-25
我只是推算出来了,并未写成程序,不知对否
甲:中日
乙:中法
丙:英法
丁:法
甲:中日
乙:中法
丙:英法
丁:法
9 楼
VeeSong
2010-09-22
留言就能看到吗?
8 楼
yangguo
2010-09-19
ge_cc 写道
想看看 ·
已发。
7 楼
ge_cc
2010-09-19
想看看 ·
6 楼
lzxz1234
2010-09-15
我要代码,楼主发给我吧,谢了
5 楼
yangguo
2010-09-10
mqlfly2008 写道
画图我会了,但要写成程序,还没想出来,等待哥们的优雅代码
代码已经发放过了。你来迟了。要的话我发你。
4 楼
mqlfly2008
2010-09-10
画图我会了,但要写成程序,还没想出来,等待哥们的优雅代码
3 楼
yangguo
2010-09-09
那你不妨拿出来show show.
2 楼
tangchj
2010-09-09
俺也实现了一种,思路基本一致,方式略有不同
1 楼
xiaoxiaoniao
2010-09-08
这种题锻炼脑子,
找到大学时的感觉了。
喜欢
发表评论
-
shiro 整合dwz 解决登录跳转问题
2014-02-26 11:07 5642在dwz界面操作会话超时时,有两种处理方法。一种是跳 ... -
html5--笑傲弈林
2011-06-24 17:39 2446结合笔者发过的ht ... -
Ice中间件研究
2011-06-17 15:02 10438Ice中间件研究 简介 Ic ... -
朝花夕拾-----中国象棋
2011-03-10 22:51 1996整理文件,发现昔日写的中国象棋程序,把玩一番,直叹今不如昔,锋 ... -
告诉你什么是优雅的设计(2)--------重构EasyMonitor
2011-01-20 17:33 2231EasyMonitor1.0出来后不久,玩着玩着,我就敏锐 ... -
告诉你什么是优雅的设计(1)--------EasyMonitor1.0
2011-01-19 17:44 2592公司里不知哪个“专家”做的项目,总把tomcat ... -
还原javaeye的崇高文化
2010-12-07 18:57 1487平时对帖子的质量比较苛刻,对一些没内容帖子不免冷嘲热讽。 本来 ... -
html5-贪食蛇
2010-11-30 14:09 1426随着HTML5的插入触碰到RIA的G点,b/s的生产力将进一步 ... -
告诉你什么是优雅的代码(10)----鬼斧神工
2010-11-03 16:06 2366最近逛javaeye得出的体会就是现在的弟弟妹妹确实都很强。动 ... -
告诉你什么是优雅的代码(9)----山寨版猜珍珠
2010-10-08 17:16 1789国庆长假百无聊赖,于是玩玩3366的游戏。 玩到一款小游戏ht ... -
告诉你什么是优雅的代码(8)-----排列组合专题
2010-09-25 14:20 6170http://www.iteye.com/topic/7703 ... -
JAVA程序员情书
2010-09-21 11:55 3588根据网络同名情书改编,版权所有,盗版不究。 我能抽象出整个 ... -
告诉你什么是优雅的代码(7)-----银行作业调度系统
2010-09-20 11:51 2334公告:C1000,请到1号窗口办理,估计用时48秒。 公 ... -
告诉你什么是优雅的代码(6)------阿拉伯钱数转换为中文形式
2010-09-19 14:08 3184http://www.iteye.com/topic/7668 ... -
告诉你什么是优雅的代码(5)------ 百度之星也是普通人(答案)
2010-09-19 09:49 2856最近在写优雅代码系列 ... -
世人谓我太疯癫,我笑世人看不穿
2010-09-17 17:44 1320你来迟了。 首先来看下这个系统的使用方法: publ ... -
告诉你什么是优雅的代码(5)------ 百度之星也是普通人
2010-09-14 16:34 2010今天在挖掘《优雅代码》系列的题材的时候,发现一贴http:// ... -
告诉你什么是优雅的代码(4)-----智力题的解法
2010-09-08 10:43 1877以下智力题摘自某一帖子。在纸上画了一下之后有了答案。出于职业敏 ... -
告诉你什么是优雅的代码(3)------山寨拼音分词
2010-09-06 16:27 4507早上看见一帖《拼音语法检查》,感觉比较啰嗦,也比较低效。于是自 ... -
用hibernate也能玩出jdbc的感觉
2010-09-03 15:20 1385相信大家都看了那篇《用jdbc也能玩出hibernate的 ...
相关推荐
面试智力题 (附面试智面试智力题 (附答案)力题 (附答案)答案)
趣味智力题-数学智力题精选.doc
面试常见智力题(逻辑分析题及答案)面试的同学们好好看看,好好准备下,尤其是软件方面的,开发和测试都有必要看看
大公司面试智力题集锦
100道逻辑智力题及答案
java面试50道智力面试题,非常有用,对大家找工作都有帮助
很不错的智力题哦。质量高!只要都弄懂来,你的智力就题高啦!
46家企业笔试-经典智力题 面试经典智力题,考考你的智慧吧。
前端大厂最新面试题-智力题.docx
经典数学智力题大全附答案
75道经典面试智力题及答案,word附带文件
微软面试时候的智力题,附有答案,祝您成功
找工作面试常见的逻辑思维题,智力题,为面试做好充分准备
收集并更正了所有在网上能够找到的关于微软智力题,并给出校正后的答案解析
微软历年面试智力题,附详细解答思路及答案。
滴滴出行2017秋招笔试真题-智力题汇总.pdf
收藏微软面试智力题 (附答案).txt benrenshoucangde
各大名企笔试面试智力题附答案汇总,电子书
智力及逻辑测试题 公司笔试面试时经常会考些智力题,逻辑题不好训练,但智力题看多了都差不多的
* 爱因斯坦出的智力题 * 这道题你能做的出来的你的智商的排名在世界前200 * 1、在一条街上,有5座房子,喷了5种颜色。 * 2、每个房里住着不同国籍的人 * 3、每个人喝不同的饮料,抽不同品牌的香烟,养不同...