兄弟们这个怎么做,给点思路

x.y.z三个男的。a.b.c三个女的,三对男女参加婚礼,x说是a未来的丈夫,a说他是y的未婚妻,c说他的未来的老公不是x。大家听了以后知道他们都在开玩笑(假话),然后用代码写出真的三对新人?

[code="java"]

public class Couple {
private String male;
private String female;
@Override
public String toString() {
// TODO Auto-generated method stub
return "male:" + male + "---female:" + female;
}
public Couple(String male, String female) {
super();
this.male = male;
this.female = female;
}
public String getMale() {
return male;
}
public void setMale(String male) {
this.male = male;
}
public String getFemale() {
return female;
}
public void setFemale(String female) {
this.female = female;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((female == null) ? 0 : female.hashCode());
result = prime * result + ((male == null) ? 0 : male.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Couple other = (Couple) obj;
if (female == null) {
if (other.female != null)
return false;
} else if (!female.equals(other.female))
return false;
if (male == null) {
if (other.male != null)
return false;
} else if (!male.equals(other.male))
return false;
return true;
}

}

[/code]

[code="java"]

import java.util.*;
import java.util.Map.Entry;

public class Main {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    String[] males = {"x","y","z"};
    String[] females = {"a","b","c"};

    //保存所有可能的夫妻对
    Set<Couple> set = new HashSet<Couple>();
    for(int i=0;i<males.length;i++)
    {
        for(int j=0;j<females.length;j++)
        {
            set.add(new Couple(males[i],females[j]));
        }
    }

    //x说是a未来的丈夫(假话)
    set.remove(new Couple("x","a"));

    //a说他是y的未婚妻(假话)
    set.remove(new Couple("y","a"));

    //c说他的未来的老公不是x(假话)
    for(int i=0;i<males.length;i++)
    {
        for(int j=0;j<females.length;j++)
        {
            if(males[i].equals("x") && !females[j].equals("c"))
                set.remove(new Couple(males[i],females[j]));

            if(!males[i].equals("x") && females[j].equals("c"))
                set.remove(new Couple(males[i],females[j]));

        }
    }

    if(set.size() == males.length)
    {
        System.out.println("成功得到所有的夫妻对如下:" + set);
    }
    else
    {
        Map<String, List<Couple>> map = new HashMap<String, List<Couple>>();
        Iterator<Couple> it = set.iterator();
        Couple c ;
        String male;
        while(it.hasNext())
        {
            c = it.next();
            male = c.getMale();
            if(map.get(male) == null)
            {
                map.put(male, new ArrayList<Couple>());
                map.get(male).add(c);
            }
            else
            {
                map.get(male).add(c);
            }
        }

        Iterator<Entry<String, List<Couple>>> itmap = map.entrySet().iterator();
        Entry<String, List<Couple>> entry;

        //真正匹配的夫妻
        List<Couple> match = new ArrayList<Couple>();
        while(itmap.hasNext())
        {
            entry = itmap.next();
            if(entry.getValue().size() == 1)
            {
                match.add(entry.getValue().get(0));                 
            }

        }

        //待删除的夫妻
        List<Couple> waitRemove = new ArrayList<Couple>();
        for(Couple cp : match)
        {
            for(Couple cSet : set)
            {
                if(!cp.equals(cSet) && cSet.getFemale().equals(cp.getFemale()))
                    waitRemove.add(cSet);
            }
        }

        set.removeAll(waitRemove);
        System.out.println("成功得到所有的夫妻对如下:" + set);
    }

}

}

[/code]

x说是a未来的丈夫 推出 x!=a
a说他是y的未婚妻 a!=y y=b||c
c说他的未来的老公不是x 推出 c=x;
据此推断

x!=a && a!=y
推出 a=z
进而
b=y;

所以 a=z;
b=y;
c=x;

真是有才,这是一个比较经典的算法吗?只不过换了一下题目: