
我国有“三山五岳”之说,其中五岳是指:东岳泰山、南岳衡山、西岳华山、北岳恒山和中岳嵩山,一位老师拿
这个组合有点多,直接在浏览器上面调试模式下,复制以下内容,回车看答案
//===============复制以下全部内容=======
// 将描述转化为数据描述U
let a = [{ 2: "泰" }, { 3: "华" }];
let b = [{ 4: "衡" }, { 2: "嵩" }];
let c = [{ 1: "衡" }, { 5: "恒" }];
let d = [{ 4: "恒" }, { 3: "嵩" }];
let e = [{ 2: "华" }, { 5: "泰" }];
// 记录所有的组合
let allRes = {};
// 区分每个组合
let globalCount = 0;
a.forEach((item1, index1) => {
b.forEach((item2, index2) => {
c.forEach((item3, index3) => {
d.forEach((item4, index4) => {
e.forEach((item5, index5) => {
globalCount++;
allRes[globalCount] = [item1, item2, item3, item4, item5]
})
})
})
})
});
// 遍历退出标识
let flage = false;
// 存放最后结果
let resItem = new Set;
let keys = Object.keys(allRes);
for (let i = 0; i < keys.length; i++) {
if (flage) {
break;
}
// 数据处理源
let oneItem = allRes[keys[i]];
// 中间结果存储,用于判断
let setKey = new Set();
let setVal = new Set();
oneItem.forEach(item1 => {
let oneKey = Object.keys(item1)[0];
let oneVal = item1[oneKey];
setKey.add(oneKey);
setVal.add(oneVal);
});
// 五个key 和 val 不冲突为正确
if (setKey.size == 5 && setVal.size == 5) {
flage = true;
resItem.add(oneItem);
}
}
console.log(JSON.stringify(Array.from(resItem)));
//[[{"3":"华"},{"2":"嵩"},{"1":"衡"},{"4":"恒"},{"5":"泰"}]]
假设甲的前半句正确,后半句错误,则2是泰山,3不是华山;因为每人都说对了半句,错了半句,因此可以推出戊说的前半句错误,后半句正确,即2不是华山,5是泰山.这就与甲说的“2是泰山”产生矛盾,所以假设错误. 因此我们可以知道,甲说的前半句错误,后半句正确,即3是华山;由戊说的可知,2不是华山,5是泰山;由丙说的可知,5不是恒山,1是衡山;由乙所说的可知,4不是衡山,2是嵩山;由丁所说的可知,3不是嵩山,4是恒山. 所以正确的说法是:1是衡山,2是嵩山,3是华山,4是衡山,5是泰山. 答:正确的说法是:1是衡山,2是嵩山,3是华山,4是衡山,5是泰山. |
