谁能回答这道题。 ~有4位朋友正围桌而坐谈话,他们用了中、英、法、日4种语言。已知:A、

谁能回答这道题。 ~有4位朋友正围桌而坐谈话,他们用了中、英、法、日4种语言。已知:A、甲、乙、丙各会两种语言,丁只会一种语言;B.有一种语言4人中有3人都会;C.甲会日语,丁不会日语,乙不会英语;D.甲与丙、丙与丁不能直接交谈,乙与丙可以直接交谈;E.没有人既会日语,又会法语。请问:甲乙丙丁各会什么语言?

在某宾馆的宴会厅里,有4位朋友正围桌而坐,侃侃而谈。他们用了中、英、法、日4种语言。现已知
A.甲、乙、丙各会两种语言,丁只会一种语言;
B.有一种语言4人中有3人都会;
C.甲会日语,丁不会日语,乙不会英语;
D. 甲与丙、丙与丁不能直接交谈,乙与丙可以直接交谈;
 E. 没有人既会日语,又会法语。
请问:甲乙丙丁各会什么语言?

package com.xiao.test;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class PuzzleLanguage {
private enum Language {FRENCH, ENGLISH, CHINESE, JAPANESE};
private Set personA = new HashSet();
private Set personB = new HashSet();
private Set personC = new HashSet();
private Set personD = new HashSet();
private Set> languageSet = generateAllLanguageSet();
public static void main(String[] args) {
PuzzleLanguage obj = new PuzzleLanguage();
obj.resolve();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private void resolve() {
for(Set setA : languageSet) {
personA = setA;
for(Set setB : languageSet) {
personB = setB;
for(Set setC : languageSet) {
personC = setC;
for(Set setD : languageSet) {
personD = setD;
if(checkLimitation()) {
System.out.println("Person A speaks : " + personA);
System.out.println("Person B speaks : " + personB);
System.out.println("Person C speaks : " + personC);
System.out.println("Person D speaks : " + personD);
System.exit(0) ;
}
}
}
}
}
}
private boolean checkLimitation() {
return limitA() && limitB() && limitC() && limitD() && limitE();
}
private boolean limitA() {
if(personA.size() != 2)
return false;
if(personB.size() != 2)
return false;
if(personC.size() != 2)
return false;
if(personD.size() != 1)
return false;
return true;
}
private boolean limitB() {
for(Language item : Language.values()) {
if(countPersons4knowingLanguage(item) ==3 )
return true;
}
return false;
}
private boolean limitC() {
if(!personA.contains(Language.JAPANESE))
return false;
if(personD.contains(Language.JAPANESE))
return false;
if(personB.contains(Language.ENGLISH))
return false;
return true;
}
private boolean limitD() {
if(!talkEachOther(personB, personC))
return false;
if(talkEachOther(personA, personC))
return false;
if(talkEachOther(personC, personD))
return false;
return true;
}
private boolean limitE() {
if(personA.contains(Language.JAPANESE) && personA.contains(Language.FRENCH))
return false;
if(personB.contains(Language.JAPANESE) && personA.contains(Language.FRENCH))
return false;
if(personC.contains(Language.JAPANESE) && personA.contains(Language.FRENCH))
return false;
if(personD.contains(Language.JAPANESE) && personA.contains(Language.FRENCH))
return false;
return true;
}
private int countPersons4knowingLanguage(Language l) {
int count = 0;
if(personA.contains(l))
count++;
if(personB.contains(l))
count++;
if(personC.contains(l))
count++;
if(personD.contains(l))
count++;
return count;
}
private boolean talkEachOther(Set set1, Set set2) {
if(set1.isEmpty() || set2.isEmpty())
return false;
Iterator it = set1.iterator();
while(it.hasNext()) {
if(set2.contains(it.next()))
return true;
}
return false;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private Set> generateAllLanguageSet() {
Set> result = new HashSet>();
result.add(new HashSet(Arrays.asList(Language.CHINESE)));
result.add(new HashSet(Arrays.asList(Language.ENGLISH)));
result.add(new HashSet(Arrays.asList(Language.FRENCH)));
result.add(new HashSet(Arrays.asList(Language.JAPANESE)));
result.add(new HashSet(Arrays.asList(Language.CHINESE , Language.ENGLISH)));
result.add(new HashSet(Arrays.asList(Language.CHINESE , Language.FRENCH)));
result.add(new HashSet(Arrays.asList(Language.CHINESE , Language.JAPANESE)));
result.add(new HashSet(Arrays.asList(Language.ENGLISH , Language.FRENCH)));
result.add(new HashSet(Arrays.asList(Language.ENGLISH , Language.JAPANESE)));
result.add(new HashSet(Arrays.asList(Language.FRENCH , Language.JAPANESE)));
result.add(new HashSet(Arrays.asList(Language.CHINESE , Language.ENGLISH, Language.FRENCH )));
result.add(new HashSet(Arrays.asList(Language.CHINESE , Language.ENGLISH, Language.JAPANESE )));
result.add(new HashSet(Arrays.asList(Language.CHINESE , Language.FRENCH, Language.JAPANESE )));
result.add(new HashSet(Arrays.asList(Language.ENGLISH , Language.FRENCH, Language.JAPANESE )));
result.add(new HashSet(Arrays.asList(Language.CHINESE , Language.ENGLISH , Language.FRENCH, Language.JAPANESE )));
return result;
}
}
运行结果:
Person A speaks : [CHINESE, JAPANESE]
Person B speaks : [FRENCH, CHINESE]
Person C speaks : [ENGLISH, FRENCH]
Person D speaks : [CHINESE]追问

看不懂了

追答

A 汉 日
B法 汉
C英 法

D汉

追问

追答

~如果你认可我的回答,请及时点击【采纳为满意回答】按钮
~~手机提问的朋友在客户端右上角评价点【满意】即可。
~你的采纳是我前进的动力~~
O(∩_∩)O,互相帮助,祝共同进步!

追问

ok了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-07
应该是中文和英语追问

认真考虑一下

第2个回答  2014-05-07
丙是中法追答

甲是英日

丁是英

乙,中法,中日,

额…不对呀,想想

追问

好好算吧

追答

心算不行,有时间找个笔算

记忆力太差了,记不清,晚上给你答案

追问

ok

追答

嗯嗯

算出来了

甲,中日

乙,中法

丙,英法

丁,中

不知道死了多少脑细胞

神啊,偶算了一个多小时

哥们,看看答案对不?对了就给个好评吧

相似回答