请教各位高手,帮我写个排除法的小程序:题是这样的:有A\B\C\D\E五位小朋友。他们手中各有一张牌,而且都不同,他们都不说实话,用排除法将他们手中的牌猜出来。他们说话如下:A说:我的牌可能是1,可能是2;
B说:我的牌可能是2,可能是3;
C说:我的牌可能是1;
D说:我的牌可能是1,可能是4;
E说:我的牌可能是3,可能是4,可能是5;
解题的思路是,C说他的牌可能是1,所以,他就是1,那么,A跟D的1就不可能是真的。所以得出A:2
B:2 或 3
C:1
D:4
E:3 或 4 或 5接着可以看到A只剩下一个2,那么就可以去除B的2,即B为3,而D只剩下一个4,那么就可以去除E的4,即E为3或5A:2
B:3
C:1
D:4
E:3 或 5接着,可以看到B只剩下一个3,那么E的3也可以去除,最终结果为:A 拿的牌是:2
B 拿的牌是:3
C 拿的牌是:1
D 拿的牌是:4
E 拿的牌是:5
就是这样的一条题目了,我用了if(){}else if,写了N长,越写越乱,还是弄不出个结果来。
懂得设计这个的高手请帮帮我,我的电子邮箱地址是[email protected]

解决方案 »

  1.   

    按照你的描述
     C说:我的牌可能是1;结果
     C   拿的牌是:1 c说了实话,但是你又说"他们都不说实话" 这本身是矛盾的阿
    最后说一句,你说话好酸阿
      

  2.   

    5个for循环。
    A=[1,2]; 
    B=[2,3]; 
    C=[1];  
    D=[1,4]; 
    E=[3,4,5];
    [n(1),m(1)]=size(A);  [n(2),m(2)]=size(B); 
    [n(3),m(3)]=size(C);  [n(4),m(4)]=size(D); [n(5),m(5)]=size(E); 
    for i=1:m(1)
        for j=1:m(2)
            for t=1:m(3)
                for p=1:m(4)
                    for q=1:m(5)
                        MM(1)=A(i);MM(2)=B(j);MM(3)=C(t);MM(4)=D(p);MM(5)=E(q);
                        for x=1:4
                            for y=x+1:5
                                if MM(x)~=MM(y)
                                   break;
                                end
                            end
                        end
                    end
                end
            end
        end
    end
    for x=1:4
        for y=x+1:5
            if MM(x)==MM(y)
                disp('猜测无结果'); break;
            end
        end
    end我是用matlab编的,个人意见,仅供参考!