返回列表 回复 发帖

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

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

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

看看大家的基本功。
转眼间,9年过去了。
蛮经典的一道题
转眼间,9年过去了。
$men['a'] = false;

$men['b'] = false;

$men['c'] = false;

$men['d'] = false;

foreach (
$men as $man=>$iskiller)

{

    
$men[$man] = true;

    if (
== (int)!$men['a'] + (int) $men['c'] +  (int) $men['d'] + (int) ! $men['d']){

        echo 
'killer is '$man;

        break;

    }

   
$men[$man] = false;

}


复制代码
[ 本帖最后由 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 编辑 ]
工作工作工作工作
function findKiller($note){

    foreach(
$note as $men=>$says){

        
$num countTF($men$note);

        if(
$num['t']==&& $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).", 你中了大奖!";

复制代码
[ 本帖最后由 roger 于 2008-7-23 11:30 编辑 ]
楼上的不赖啊
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";

?>

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