楼主: hotmac
13488 138

[资料] 《就是这道题让无数谷歌面试者跪拜了!》   [推广有奖]

11
czshhh 发表于 2012-9-27 10:03:47
A女>C女>D男>B男>E女>F女>G男;

12
dingxiaochao 发表于 2012-9-27 10:16:36
原来是个多解的问题。顺序可以有多种,但是男的女的是可以确定的。DBG是男,其他是女

13
wangluan 发表于 2012-9-27 10:38:03
如果上述7个人不是一家人,则只有C、F确定是女的,其他未知

若上述7个人是一家人,则只有22组可能
按年龄从大到小分布为
1        A男        B男        C女        D女        E男        F女        G男
2        D男        B男        A女        C女        E女        F女        G男
3        A男        C女        B男        D女        E男        F女        G男
4        D男        A女        B男        C女        E女        F女        G男
5        D男        B女        A男        C女        E女        F女        G男
6        A男        C女        B女        D男        E男        F女        G男
7        D男        A女        C女        B男        E女        F女        G男
8        D男        A女        C女        E女        B男        F女        G男
9        D男        A女        C女        E女        F女        B男        G男
10        A女        D男        B男        C女        E女        F女        G男
11        A女        D男        C女        B男        E女        F女        G男
12        A女        D男        C女        E女        B男        F女        G男
13        A女        D男        C女        E女        F女        B男        G男
14        A女        C女        D男        B男        E女        F女        G男
15        A女        C女        D男        E女        B男        F女        G男
16        A女        C女        E男        D女        B男        F女        G男
17        A女        C女        D男        E女        F女        B男        G男
18        A女        C女        E男        D女        F女        B男        G男
19        D女        A女        E男        C女        B女        F女        G男
20        A女        C女        E女        D男        B男        F女        G男
21        A女        C女        E女        D男        F女        B男        G男
22        A女        C女        E女        F女        D男        B男        G男

14
wangluan 发表于 2012-9-27 10:38:58
用matlab编程实现的,不知道有没有简单方法
% %实验小程序
%题目:1.A有3个妹妹;2B有一个哥哥;3.C是女的,她有2个妹妹;4.D有2个弟弟;5.E有2个姐姐;6.F也是女的,但她和G没有妹妹。根据这些条件,你能推算出谁是男性,谁是女性吗?
%来源:https://bbs.pinggu.org/thread-1591973-1-1.html
%方法:穷举法

clear all
clc
%0为男性,1为女性
%A中存储7个人的性别,按年龄顺序
%B中存储对应人的姐姐、哥哥、妹妹、弟弟的人数
%D为中间变量
%C为最终输出,每行为一种情况,共22种,每行依次分别为[11-17(表示A-G),1-7(年龄从大到小),0-1(性别0为女,1为男),,,]
%E为最终输出,每行为一种情况,共22种,每行依次分别为年龄从大到小排列的A-G和性别
k = 1;
C = zeros(22,21);
D = zeros(3,7);
E = char(22,21);

for i = 0 : 1 : 127
    A = zeros(7,1);
    B = zeros(7,4);
    s = dec2bin(i,7);
    for j = 1:7
        A(j) = str2double(s(j));
    end
    for j = 1:7
        sum1 = sum(A(1:j-1));
        sum2 = sum(A(j+1:end));
        B(j,:) = [sum1,j - 1 - sum1,sum2,7 - j - sum2];
    end
    for j1 = 1:7
        if B(j1,3) == 3
            for j2 = 1:7
                if j2 ~= j1
                    if B(j2,2) == 1                       
                        for j3 = 1:7
                            if (j3 - j2) * (j3 - j1) ~= 0
                                if (B(j3,3) == 2) && (A(j3) == 1)
                                    for j4 = 1:7
                                        if (j4 - j3) * (j4 - j2) * (j4 - j1) ~= 0
                                            if B(j4,4) == 2
                                                for j5 = 1:7
                                                    if (j5 - j4) * (j5 - j3) * (j5 - j2) * (j5 - j1) ~= 0
                                                        if B(j5,1) == 2
                                                            for j6 = 1:7
                                                                if (j6 - j5) * (j6 - j4) * (j6 - j3) * (j6 - j2) * (j6 - j1) ~= 0
                                                                    if (B(j6,3) == 0) && (A(j6) == 1)
                                                                        for j7 = 1:7
                                                                            if (j7 - j6) * (j7 - j5) * (j7 - j4) * (j7 - j3) * (j7 - j2) * (j7 - j1) ~= 0
                                                                                if B(j7,3) == 0
                                                                                    %按年龄排序
                                                                                    D = [11,j1,A(j1)-2;12,j2,A(j2)-2;13,j3,A(j3)-2;14,j4,A(j4)-2;15,j5,A(j5)-2;16,j6,A(j6)-2;17,j7,A(j7)-2;];  
                                                                                    D = sortrows(D,2)';
                                                                                    C(k,:) = D(:);
                                                                                    %数字转换为可读字符串
                                                                                    m = 1;
                                                                                    for l = 1:21
                                                                                        param = C(k,l);
                                                                                        if param == -1
                                                                                            E(k,m:m+1) = '女 ';
                                                                                            m = m + 2;
                                                                                        elseif param == -2
                                                                                            E(k,m:m+1) = '男 ';
                                                                                            m = m + 2;
                                                                                        elseif param == 11
                                                                                            E(k,m) = 'A';
                                                                                            m = m + 1;
                                                                                        elseif param == 12
                                                                                            E(k,m) = 'B';
                                                                                            m = m + 1;
                                                                                        elseif param == 13
                                                                                            E(k,m) = 'C';
                                                                                            m = m + 1;
                                                                                        elseif param == 14
                                                                                            E(k,m) = 'D';
                                                                                            m = m + 1;
                                                                                        elseif param == 15
                                                                                            E(k,m) = 'E';
                                                                                            m = m + 1;
                                                                                        elseif param == 16
                                                                                            E(k,m) = 'F';
                                                                                            m = m + 1;
                                                                                        elseif param == 17
                                                                                            E(k,m) = 'G';
                                                                                            m = m + 1;
                                                                                        end
                                                                                    end
                                                                                    k = k + 1;
                                                                                end
                                                                            end
                                                                        end
                                                                    end
                                                                end
                                                            end
                                                        end
                                                    end
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
    end
end
disp('A-G按年龄排序为')
E

15
andrew3335 发表于 2012-9-27 11:40:18
回楼上的
G男<F女<B男<D女<E男<C女<A女 同样满足啊

16
andrew3335 发表于 2012-9-27 11:57:23
最小的G男,其次F女这是确定的。第三小的只能是B女,B男,E男或E女,然后变化就太多了,确定不了男女

17
hotmac 在职认证  学生认证  发表于 2012-9-27 12:52:10
wangluan 发表于 2012-9-27 10:38
如果上述7个人不是一家人,则只有C、F确定是女的,其他未知

若上述7个人是一家人,则只有22组可能
强人啊 不是一家咋整捏?
人生其实很简单,只要懂得“珍惜、知足、感恩”就拥有了生命的光彩。

18
wangluan 发表于 2012-9-27 13:29:13
andrew3335 发表于 2012-9-27 11:40
回楼上的
G男

第16组A女        C女        E男        D女        B男        F女        G男

19
wangluan 发表于 2012-9-27 13:32:30
hotmac 发表于 2012-9-27 12:52
强人啊 不是一家咋整捏?
如果不是一家人就没办法了啊,举个极端的例子
A家4个娃,A是老大,下面三个妹,A的性别无法计算
B家2个娃,B是老小,上面一个哥,B的性别无法计算
依此类推,根本没法解啊,只有已知的C\F是女性

20
AllForU 发表于 2012-9-28 00:06:22
垃圾题目..不是一家人根本就无解。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-29 04:18