关于数字的智力题-三个女儿的年龄

题目:一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?解答:假设三个女儿按照年龄从小到大的排序时x,y,z。则1<=x,y,z<=11,x+y+z=13。能满足这两个条件的有很多组合,例如11(1,1,11),32(1,4,8)等。明显11(1,1,11)这些的组合是不符合实际情况的,应该事先被排除。这里假设经理比最大年龄的女儿至少大18岁。列举满足条件的组合有

  27(1,3,9)
  32(1,4,8)
  35(1,5,7)
  36(1,6,6)
  36(2,2,9)
  48(2,3,8)
  56(2,4,7)
  60(2,5,6)
  63(3,3,7)
  72(3,4,6)
  75(3,5,5)
  80(4,4,5)

因为题目中下属知道了经理的年龄,但是依然推不出三个女儿的年龄,则说明经理的年龄在这种情况下的组合应该有两组以上,则上述组合只有36(1,6,6)和36(2,2,9)符合题意。又因为经理说只有一个女儿的头发是黑的,则可进一步排除而得到答案是36(2,2,9)。
void BrainTester::AgesOfDaughter() {
	/*
	 * Suppose the ages of manager‘s three daughter are respectively x,y,z.
	 * Then, 1<=x,y,z<=11
	 */
	class Triple {
	public:
		int x, y, z;
	};
	Triple ages;
	int manager = 0;
	multimap<int, Triple> result;
	for (int x = 1; x <= 11; ++x) {
		for (int y = x; y <= 11; ++y) {
			for (int z = y; z <= 11; ++z) {
				if (x + y + z == 13) {
					manager = x * y * z;
					if (manager >= z + 18) {
						ages.x = x;
						ages.y = y;
						ages.z = z;
						result.insert(make_pair(manager, ages));
					}
				}
			}
		}
	}
	set<int> key_set;
	multimap<int, Triple>::iterator it;
	for (it = result.begin(); it != result.end(); ++it) {
		key_set.insert(it->first);
	}
	set<int>::iterator it_set;
	for (it_set = key_set.begin(); it_set != key_set.end(); ++it_set) {
		if (result.count(*it_set) <= 1) {
			result.erase(result.find(*it_set));
		}
	}

	for (it = result.begin(); it != result.end(); ++it) {
		ages = it->second;
		if (ages.z > ages.y)
		cout << it->first << "(" << ages.x << "," << ages.y << "," << ages.z
				<< ")" << endl;
	}
}

  


关于数字的智力题-三个女儿的年龄

时间: 2024-08-07 06:15:44

关于数字的智力题-三个女儿的年龄的相关文章

关于数字的智力题-两个数之和与之积

题目: 已知两个1~30之间的数字,甲知道两数之和,乙知道两数之积.   甲问乙:"你知道是哪两个数吗?"乙说:"不知道":   乙问甲:"你知道是哪两个数吗?"甲说:"也不知道":   于是,乙说:"那我知道了":   随后甲也说:"那我也知道了":   这两个数是什么? 解答: 隐含条件:乙不知道答案,则说明这两个数之积不是素数.当甲回答说不知道答案后,乙马上知道了答案,说明乙能利用

关于数字的智力题-小白鼠与毒药

题目: 有1000瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的药物,最少需要多少只小白鼠? 解答: 用二进制的思路去思考,1000瓶药代表了1000种状态,那么1000用二进制表示可以用一个10位的二进制数就可以全部表示出来,考虑用十只白鼠来试验,用0和1代表它们最终的状态即死亡或活着,初始状态十只白鼠表示为0000000000. 关于数字的智力题-小白鼠与毒药,布布扣,bubuko.com

十道智力题(三)

第一题 第一题比较简单,两边可以组成中间图像,选:H 第二题 小红和小蓝都是李老师的学生,李老师的生日是M月D日,是下列10组中的一天,李老师把M值告诉了小红,把D值告诉了小蓝,通过小红和小蓝的对话你能知道李老师的生日是哪一天吗?请根据以下对话推断出李老师的生日是哪一天( )小红说:如果我不知道的话,小蓝肯定也不知道小蓝说:本来我也不知道,但是现在我知道了小红说:哦,那我也知道了 3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日 第三题 一

瞎子翻牌(智力题三)

题目:(瞎子翻牌) 给一个瞎子52张扑克牌,并告诉他里面恰好有10张牌是正面朝上的.要求这个瞎子把牌分成两堆,使得每堆牌里正面朝上的牌的张数一样多.瞎子应该怎么做?(瞎子摸不出牌是正面或者是反面,但是却可以随意翻动每一张牌) 解答:将52张牌分为2堆,一堆10张,另一堆42张,将10张的那一堆全部翻起来就行了. 分析: 上 下 翻前10张堆 翻后10张堆 上 下 上 下 42张堆 1 9 9 1 9 33 2 8 8 2 8 34 3 7 7 3 7 35 4 6 6 4 6 36 5 5 5

java面试智力题

智力题,每个正式的笔试.面试都会出,而且在面大企业的时候必然会问到,笔者曾在很多面试中,都被问到过,不过答得都不是很好,因为时间很短,加上我们有时候过于紧张,所以做出这类问题,还是有一定的难度,从这篇文章中我会总结一些常见的智力题,希望各位读者能在本章所列的题中找出做这类题的方法,克服面试中的难题! 1.农民分金条问题 题目:你让农民为你工作7天,给他的回报是一根金条.金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何 给你的工人付费,保证该农民在七天中任意

逻辑智力题【更新中】

1.一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄.请问三个女儿的年龄分别是多少?为什么? 答案: 此经理有一对双胞胎女儿,她们的年龄分别是:2岁.2岁.9岁:经理的年龄是32岁. 与生物学关系较密切. 发色与年龄之间的关系. 下属知道经理的年龄, 只要把13分成三个数, 三数乘积等于经理年龄有多种可能性. 所以, 令下

智力题小结(1)

1.有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?  答: 香a点燃一头,香b点燃两头.等香b烧完时,时间过去了30分钟.再把香a剩下的另一头也点燃.从这时起到a烧完的时间就是15分钟. 2.一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄.请问三个女儿的年龄分别是多少?为什么? 答

智力题小结(2)

1.你在一幢100层大楼下,有21根电线线头标有数字1..21.这些电线一直延伸到大楼顶,楼顶的线头处标有字母A..U.你不知道下面的数字和上面的字母的对应关系.你有一个电池,一个灯泡,和许多很短的电线.如何只上下楼一次就能确定电线线头的对应关系? 答案:在下面把2,3连在一起,把4到6全连在一起,把7到10全连在一起,等等,这样你就把电线分成了6个"等价类",大小分别为1, 2, 3, 4, 5, 6.然后到楼顶,测出哪根线和其它所有电线都不相连,哪些线和另外一根相连,哪些线和另外两

智力题:1-28题

1.你让工人为你工作7天,给工人的回报是一根金条.金条平分成相连的7段 ,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你 的工人付费? 答案:分成1/7,2/7,4/7,因为1,2,4可以组合成1-7的任何一个数字. 2.请把一盒蛋糕切成8份,分给8个人,但蛋糕盒里还必须留有一份. 答案:面对这样的怪题,把切成的8份蛋糕先拿出7份分给7人,剩下的 1份连蛋糕盒一起分给第8个人. 3.小明一家过一座桥,过桥时是黑夜,所以必须有灯.现在小明过桥要1秒, 小明的弟弟要3秒,小明