标题: [思考题]凶手、被害、帮凶、目击者 [打印本页]
作者: CrLf 时间: 2015-6-4 01:02 标题: [思考题]凶手、被害、帮凶、目击者
有对夫妇,生一男一女,四口之家。一天晚上,成员中的一个杀了另一个,剩下两个成员分别是帮凶和目击者。
并已知以下条件
1、帮凶和目击者性别不同
2、最年长者和目击者性别不同
3、最年轻者和被害者性别不同
4、帮凶年纪比被害者大
5、父亲年纪最大
6、最年轻的不是凶手
请问凶手、被害、帮凶、目击者分别是谁?
这是一道逻辑题,你能用编程语言(不限)求解吗?
感觉比较适合支持结构体或对象的语言
作者: 523066680 时间: 2015-6-4 09:14
本帖最后由 523066680 于 2015-6-4 15:33 编辑
现在医学这么发达,这对夫妇有没有可能是gay ……
作者: 523066680 时间: 2015-6-4 17:39 标题: Perl
本帖最后由 523066680 于 2015-6-4 20:36 编辑
- use utf8;
- binmode(STDOUT, ":encoding(gbk)");
-
- my @cup;
- my @element;
-
- our %h=(
- "father" => { "sex"=>"male", "age"=>100 },
- "mother" => { "sex"=>"female", "age"=>90 },
- "son" => { "sex"=>"male", "age"=>20 },
- "daughter" => { "sex"=>"female", "age"=>20 },
- );
-
- @element = keys %h;
-
- &arrange(\@cup, \@element);
-
- sub arrange {
- my ($a, $b) = (shift, shift);
- my (@ar, @br);
-
- if (scalar(@{$a}) == 4) {
- &check(@{$a});
- }
- for my $i (0..$#{$b}) {
- @ar=(@{$a}, $b->[$i]);
- @br=@{$b}[0..$i-1, $i+1..$#{$b}];
- &arrange(\@ar, \@br);
- }
- }
-
- sub check {
- our %h;
- my ($killer, $victim, $helper, $witness) = @_;
- return 0 if ( $h{$helper}{sex} eq $h{$witness}{sex} ); # 1 帮凶和目击者性别不同
- return 0 if ( $h{father}{sex} eq $h{$witness}{sex} ); # 2 最年长者和目击者性别不同
- return 0 if ( $h{$helper}{age} < $h{$victim}{age} ); # 4 帮凶年纪 大于 被害者年纪
-
- # 3 最年轻者和被害者性别不同
- # 6 最年轻的不是凶手
-
- if ( $h{$victim}{"sex"} eq "female" ) { # 若被害者是女性
- return 0 if ( $killer eq "son" ); #则最年轻的是男性(儿子)
- $h{son}{age} = 10; #假设年龄
- $h{daughter}{age} = 20; #假设年龄
- } else { # 相反
- return 0 if ( $killer eq "daughter" );
- $h{son}{age} = 20;
- $h{daughter}{age} = 10;
- }
-
- return 0 if ( $h{$helper}{age} < $h{$victim}{age} );
-
- print "凶手:$killer 受害者:$victim, 帮凶:$helper, 目击者:$witness\n";
- return 1;
- }
复制代码
arrange 是递归排列
凶手:mother 受害者:son, 帮凶:father, 目击者:daughter
在某个群里一问,人家十来秒就把答案手算出来了 T_T 突然感觉自己好渣
作者: yangfengoo 时间: 2015-6-4 20:07
回复 3# 523066680
对能理解递归这种高大上的表示佩服
作者: 523066680 时间: 2015-6-4 20:34
回复 4# yangfengoo
人家用N层for的看起来爽快一点,
用递归是因为以前写了排列用的函数模板,拿出来用了
作者: Bella 时间: 2015-6-5 11:45
本帖最后由 Bella 于 2015-6-6 15:19 编辑
- @echo off
- set /a gender[father]=gender[son]=1,gender[mother]=gender[daughter]=0
- set /a age[father]=3,age[mother]=2
- call :perm " father mother son daughter"
- pause&exit
-
- :perm
- setlocal enabledelayedexpansion
- set "chars=%~1"
- if "!chars!" == "" (
- for %%i in (son daughter) do (
- set /a age[son]=age[daughter]=1,age[%%i]=0
- for /f "tokens=1-4" %%a in (%2) do (
- if !age[%%c]! GTR !age[%%b]! if !gender[%%c]! NEQ !gender[%%d]! ^
- if "%%i" NEQ "%%a" if !gender[%%i]! NEQ !gender[%%b]! if !gender[%%d]! NEQ 1 ^
- echo murderer:%%a victim:%%b accomplice:%%c witness:%%d
- )
- )
- ) else for %%j in (%~1) do call :perm "!chars: %%j=!" "%~2 %%j"
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |