Heim >Backend-Entwicklung >PHP-Tutorial > 逻辑题:六个男人和六个女人,该怎么处理

逻辑题:六个男人和六个女人,该怎么处理

WBOY
WBOYOriginal
2016-06-13 12:53:511004Durchsuche

逻辑题:六个男人和六个女人


见图片,
有六个男人,简称A,B,C,D,E,F.和他们的母亲只在同一个村子。
每位母亲dou'不幸丧夫,但都又婚。第二任丈夫是除了自己儿子以外的那五个男人的一个。

D太太对C的母亲说: 由于第二次婚姻,她(D太太)成了E太太的婆婆的婆婆的婆婆,A成了B的继父的继父,而F太太成了C太太的儿媳妇的儿媳妇的儿媳妇的儿媳妇。


问谁嫁给了谁?

逻辑题 六个男人 六个女人
------解决方案--------------------
c取了a妈,a取了d妈,d取了b妈,b取了f妈,f取了e妈,e取了c妈。。。
这个其实产生了一个环了,12个人谁都可以是谁的长辈,就看怎么从哪边算了
------解决方案--------------------
你确认你的题目是正确的?
我认为题目出错了(搜索了一下也未找到出处)
$dict = array('A', 'B', 'C', 'D', 'E', 'F');<br />
<br />
//搜索 F太太成了C太太的儿媳妇的儿媳妇的儿媳妇的儿媳妇<br />
$st = array(<br />
	array('F' => 'A'),<br />
	array('F' => 'B'),<br />
	array('F' => 'C'),<br />
	array('F' => 'D'),<br />
	array('F' => 'E'),<br />
);<br />
<br />
while($rs = array_shift($st)) {<br />
	$len = count($rs);<br />
 	$k = end($rs);<br />
	if(isset($rs[$k])) continue;<br />
	foreach($dict as $v) {<br />
		if($k == $v <br><font color='#FF8000'>------解决方案--------------------</font><br> in_array($v, $rs)) continue;<br />
		if($len == 4 && $v == 'C') $res[] = array_merge($rs, array($k => $v));<br />
		else $st[] = array_merge($rs, array($k => $v));<br />
	}<br />
}<br />
//搜索结束,共 24 组<br />
<br />
foreach($res as $i=>$r) {<br />
	//配齐 6 个<br />
	$k = current(array_diff($dict, array_keys($r)));<br />
	$v = current(array_diff($dict, $r));<br />
	if($k == $v) continue;<br />
	$r = array_merge($r, array($k => $v));<br />
	//判断,两个条件不能同时满足<br />
	if($r[$r['B']] == 'A' && $r[$r[$r['D']]] == 'E') print_r($r);<br />
	//但分别可以<br />
//	if($r[$r['B']] == 'A') print_r($r); //A成了B的继父的继父<br />
//	if($r[$r[$r['D']]] == 'E') print_r($r); //D太太成了E太太的婆婆的婆婆的婆婆<br />
}<br />

如是程序有错,请指正
------解决方案--------------------
我算过了,有两种答案
我们用大写代表母亲,小写代表儿子,因为题上说了第二任丈夫都是其他五个男人中的一个,所以 当用儿子->媳妇->儿子->媳妇这样的方式连下来,最后应该是一个有12个点的链。我们用?号表示未知的。
第一个信息:D太太是E太太的婆婆的婆婆的婆婆。
所得到链 D->d->?->?->?->?->E->e  共8个点,4个连着未知
第二个信息:a成了b的继父的继父
所得到链 A->a->?->?->B->b  共6个点,2个连着未知
第三个信息:F太太是C太太的儿媳妇的儿媳妇的儿媳妇的儿媳妇
所得到链 C->c->?->?->?->?->?->?->F->f 共10个点 6个连着未知
接下来就是把这三条链和为一条(总共12个点的链),第三天刚好有个6连未知,因此第二条链可以符合,符合后中间两个连着未知距离外面分别是4个点,正好也和第一条符合,但是位置不定,因此有两种结果,分别是:
1: C->c->A->a->D->d->B->b->F->f->E->e
2:  D->d->C->c->A->a->E->e->B->b->F->f
符合条件,
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn