//A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。
// 假设 abc 对应 123(xyz)
这道题的解法是需要遍历所有的可能, 刚开始的想法是 3*3 次 可以遍历所有的可能, 就是 一个嵌套循环就可以了,然后发现问题没有那么简单,因为遍历的时候还需要如果 其中新郎新娘有条件 不符合 需要重新遍历寻找例外一种组合的可能,所以需要 换种模型,将 三个新郎 ABC,抽象成三个 循环嵌套,就能遍历所有的可能了,新郎A 第一个循环可能搭配 XYZ 中的 任意一个,新郎 B 和 新郎C 同样也是,但是需要注意限制条件,除里上面的三个条件以外,还有个隐藏条件, 新郎对应的新娘分别都是不同的,所以逻辑上是 新郎A 对应 新娘 XYZ 的时候,新郎B 和 新郎 C 同样在 内循环中对应 新娘 XYZ,代码如下:
for (int a = 1; a <= 3; a++) {
for (int b = 1; b <= 3; b++) {
for (int c = 1; c <= 3; c++) {
}
}
}
三个循环嵌套,将所有的可能都包含了,然后需要加上判断条件1.flag是新郎新娘不能重复交叉的判断条件,2.flag1是题目给出的判断条件,如下:
char cs[] = {'x','y','z'};
for (int a = 1; a <= 3; a++) {
for (int b = 1; b <= 3; b++) {
for (int c = 1; c <= 3; c++) {
boolean flag = a != b && a != c && b !=c;
boolean flag1 = a != 1 && c!= 1 && c != 3;
if(flag1 && flag){
System.out.println(cs[a-1]+"-"+cs[b-1]+"-"+cs[c-1]);
}
}
}
}
完整的 class 类代码如下:
package dataStract;
public class XlxlTest {
public static void main(String[] args) {
char cs[] = {'x','y','z'};
for (int a = 1; a <= 3; a++) {
for (int b = 1; b <= 3; b++) {
for (int c = 1; c <= 3; c++) {
boolean flag = a != b && a != c && b !=c;
boolean flag1 = a != 1 && c!= 1 && c != 3;
if(flag1 && flag){
System.out.println(cs[a-1]+"-"+cs[b-1]+"-"+cs[c-1]);
}
}
}
}
}
}