- 浏览: 113246 次
- 性别:
- 来自: 深圳
博客专栏
-
告诉你什么是优雅的代码
浏览量:23454
最新评论
-
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 5698在dwz界面操作会话超时时,有两种处理方法。一种是跳 ... -
html5--笑傲弈林
2011-06-24 17:39 2503结合笔者发过的ht ... -
Ice中间件研究
2011-06-17 15:02 10524Ice中间件研究 简介 Ic ... -
朝花夕拾-----中国象棋
2011-03-10 22:51 2064整理文件,发现昔日写的中国象棋程序,把玩一番,直叹今不如昔,锋 ... -
告诉你什么是优雅的设计(2)--------重构EasyMonitor
2011-01-20 17:33 2284EasyMonitor1.0出来后不久,玩着玩着,我就敏锐 ... -
告诉你什么是优雅的设计(1)--------EasyMonitor1.0
2011-01-19 17:44 2681公司里不知哪个“专家”做的项目,总把tomcat ... -
还原javaeye的崇高文化
2010-12-07 18:57 1527平时对帖子的质量比较苛刻,对一些没内容帖子不免冷嘲热讽。 本来 ... -
html5-贪食蛇
2010-11-30 14:09 1481随着HTML5的插入触碰到RIA的G点,b/s的生产力将进一步 ... -
告诉你什么是优雅的代码(10)----鬼斧神工
2010-11-03 16:06 2410最近逛javaeye得出的体会就是现在的弟弟妹妹确实都很强。动 ... -
告诉你什么是优雅的代码(9)----山寨版猜珍珠
2010-10-08 17:16 1836国庆长假百无聊赖,于是玩玩3366的游戏。 玩到一款小游戏ht ... -
告诉你什么是优雅的代码(8)-----排列组合专题
2010-09-25 14:20 6215http://www.iteye.com/topic/7703 ... -
JAVA程序员情书
2010-09-21 11:55 3673根据网络同名情书改编,版权所有,盗版不究。 我能抽象出整个 ... -
告诉你什么是优雅的代码(7)-----银行作业调度系统
2010-09-20 11:51 2378公告:C1000,请到1号窗口办理,估计用时48秒。 公 ... -
告诉你什么是优雅的代码(6)------阿拉伯钱数转换为中文形式
2010-09-19 14:08 3265http://www.iteye.com/topic/7668 ... -
告诉你什么是优雅的代码(5)------ 百度之星也是普通人(答案)
2010-09-19 09:49 2909最近在写优雅代码系列 ... -
世人谓我太疯癫,我笑世人看不穿
2010-09-17 17:44 1354你来迟了。 首先来看下这个系统的使用方法: publ ... -
告诉你什么是优雅的代码(5)------ 百度之星也是普通人
2010-09-14 16:34 2062今天在挖掘《优雅代码》系列的题材的时候,发现一贴http:// ... -
告诉你什么是优雅的代码(4)-----智力题的解法
2010-09-08 10:43 1925以下智力题摘自某一帖子。在纸上画了一下之后有了答案。出于职业敏 ... -
告诉你什么是优雅的代码(3)------山寨拼音分词
2010-09-06 16:27 4565早上看见一帖《拼音语法检查》,感觉比较啰嗦,也比较低效。于是自 ... -
用hibernate也能玩出jdbc的感觉
2010-09-03 15:20 1423相信大家都看了那篇《用jdbc也能玩出hibernate的 ...
相关推荐
面试常见智力题(逻辑分析题及答案) 本资源摘要信息将对面试常见智力题进行详细的分析和解释,涵盖逻辑分析题及答案,旨在帮助读者更好地理解和掌握逻辑分析能力。 一、面试常见智力题 面试常见智力题是指在面试...
大公司面试智力题集锦
### 各大名企笔试面试智力题解析 #### 海盗分金币问题解析 这个问题是经典的博弈论题目,考察的是参与者的逻辑思维能力和对博弈论的理解。题目设定在一个假设的情境下,五个海盗通过抽签决定分配顺序,然后根据...
### 常见的面试智力题与答案解析 在求职过程中,面试官常常会通过一些智力题来评估应聘者的逻辑思维能力、问题解决能力和创新能力。本文将对一系列常见面试智力题进行详细解析,并给出答案,帮助大家更好地准备面试...
经典数学智力题大全附答案
### 毕业生找工作常见智力题及答案解析 对于即将步入职场的毕业生而言,面试中的智力题常常成为一道难以逾越的门槛。这类题目旨在考察求职者的逻辑思维能力、解决问题的能力以及创新思维等多方面素质。下面我们将...
这些题目是来自46家不同公司的笔试题,涵盖了编程、逻辑和算法等方面,旨在测试面试者的智力和编程能力。下面是对这些题目详细解答: 1. Sony 笔试题 - 完成程序 这是一个打印星号(*)的图案,每行的星号数量按照等...
根据给定的信息,我们可以从这些逻辑智力题目中提取并总结出一些重要的知识点: ### 1. 数学逻辑问题 #### 题目示例: - 一个家庭有两兄弟,年龄分别为2岁、2岁、9岁;另一个家庭有两兄弟,年龄分别为32岁。问:两...
根据提供的文件信息,可以看出这是一份包含了多个微软面试智力题目的文档。虽然原文中的内容较为杂乱且不易理解,但可以从中提取出一些关键的问题,并尝试解析这些题目背后的知识点。 ### 微软面试智力题解析 ####...
智力测试和逻辑题是企业在招聘过程中常常用于评估应聘者思维能力、问题解决能力和创新思考的重要环节。这些题目旨在考察候选人的逻辑推理、空间想象、数字敏感度、问题解决技巧以及快速学习的能力。以下是对这些测试...
### 经典面试智力题解析 #### 题目1:如何使用5升和6升的水壶取得3升的水? **解析:** 这个问题考验的是逻辑思维能力和数学推理能力。解题步骤如下: 1. **第一步:**将6升水壶装满水。 2. **第二步:**将6升...
"程序员有趣的面试智力题及答案.pdf" 这是一份关于程序员面试的智力题及答案的PDF文件,包含11道智力题,涵盖了算法、数据结构、逻辑思维等方面的知识点。 问题1:双人游戏策略 考虑一个双人游戏,游戏在一个圆桌...
笔试常见的智力题:你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段;为什么下水道的盖子是圆的;有7克、2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐 分成50、90克各一份;
在求职过程中,笔试和面试是两个至关重要的环节,智力题的出现则往往能评估候选人的逻辑思维、问题解决和创新能力。这些题目不仅测试了应聘者的专业知识,还考察了他们在压力下的反应速度和应对复杂问题的能力。下面...
小蒲的解法是将金条分成1/7、2/7和4/7三份。按照这个方案,他可以在每一天结束时给出相应份额,确保在不违反规则的情况下完成支付。 这个问题展示了分治法的思维,即通过将大问题分解为小问题来解决。在实际工作中...
各种笔试智力题吧,几百道吧 _760B_笔试常见的智力题 13道经典智力题及其答案 20智力题 测智力题 经典智力题 智力题.exe 智力题.pdf 智力题.txt 智力题--★【汉魅HanMei—就业指导分享】 智力题合集
比奈-西蒙智力测量量表(附答案).doc
本宝典不仅包含基础的Java语法、面向对象设计、数据结构与算法等核心知识点,还涉及智力题和薪水谈判策略,为求职者提供了全方位的面试指南。 1. **Java基础** - **语法**:深入理解基本语法,如变量声明、数据...