首页 | PHP资讯 | 技术专栏 | 资源共享 | PHP培训 | PHP职场 | 图书 | PHP ON WIN | PHP圈子
返回列表 回复 发帖

有兴趣的玩一下:谁是凶手。写个程序来解答。

有兴趣的玩一下:谁是凶手。写个程序来解答。

某地发生了一起谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯中的一个。以下为4个嫌疑犯的供词。
    A说:不是我。
    B说:是C。
    C说:是D。
    D说:C在胡说。
已知3个人说了真话,1个人说的是假话。请根据这些信息,写一个程序来确定到底谁是凶手。

看看大家的基本功。
转眼间,9年过去了。
蛮经典的一道题
转眼间,9年过去了。
[php]
$men['a'] = false;
$men['b'] = false;
$men['c'] = false;
$men['d'] = false;
foreach ($men as $man=>$iskiller)
{
    $men[$man] = true;
    if (3 == (int)!$men['a'] + (int) $men['c'] +  (int) $men['d'] + (int) ! $men['d']){
        echo 'killer is '. $man;
        break;
    }
   $men[$man] = false;
}
[/php]

[ 本帖最后由 sentrychen 于 2008-7-23 10:30 编辑 ]
原帖由 sentrychen 于 2008-7-23 10:28 发表

$men['a'] = false;
$men['b'] = false;
$men['c'] = false;
$men['d'] = false;
foreach ($men as $man=>$iskiller)
{
    $men[$man] = true;
    if (3 == (int)!$men['a'] + (int) $men['c'] +  (int)  ...
思路是对的,不错。
不过写的不够简洁,也不够直观。
转眼间,9年过去了。
错了 。。在改

[ 本帖最后由 CrossMaya 于 2008-7-23 11:20 编辑 ]
工作工作工作工作
[php]
function findKiller($note){
    foreach($note as $men=>$says){
        $num = countTF($men, $note);
        if($num['t']==3 && $num['f']==1){
            return $men;
        }
    }
}
function countTF($tempKiller, $note){
    $t = $f = 0;
    foreach($note as $men=>$says){
        in_array($tempKiller, $says)?$t++:$f++;
    }
    return array('t'=>$t,'f'=>$f);
}

$note = array(
    'a'=>array('b','c','d'),
    'b'=>array('c'),
    'c'=>array('d'),
    'd'=>array('a','b','c')
);
echo "恭喜 ".findKiller($note).", 你中了大奖!";
[/php]

[ 本帖最后由 roger 于 2008-7-23 11:30 编辑 ]
楼上的不赖啊
红色主机免备案香港型空间推广 www.redphp.cn
C和D肯定有一个人在说假话,既然有3个人在说真话,那肯定有一个人在说假话,那必是C和D中的,那B说的肯定是真话,那就是C是坏蛋喽!  对吗?
原帖由 roger 于 2008-7-23 11:28 发表

function findKiller($note){
    foreach($note as $men=>$says){
        $num = countTF($men, $note);
        if($num['t']==3 && $num['f']==1){
            return $men;
        }
    }
}
funct ...
比第一个朋友写的还复杂。。。
转眼间,9年过去了。
<?php
print "C";
?>

最简单的写法 ...
我是一只小小象~~ 咿呀咿呀哟~~~~
返回列表