有A、B、C、D每个字母都有两种状态+或-
第一种情况要满足:A+C-的所有组合(B、D没出现就是+-两种都有可能出现)
得到的组合就是:
A+B+C-D+
A+B-C-D+
A+B-C-D-
A+B+C-D+第二种情况:A+|B+&C-,则A或B至少要有一个是+,同时C必须是-。拆开来就是:A+C-和B+C-的所有组合。
求算法,或思路
第一种情况要满足:A+C-的所有组合(B、D没出现就是+-两种都有可能出现)
得到的组合就是:
A+B+C-D+
A+B-C-D+
A+B-C-D-
A+B+C-D+第二种情况:A+|B+&C-,则A或B至少要有一个是+,同时C必须是-。拆开来就是:A+C-和B+C-的所有组合。
求算法,或思路
String[] a={"a+","a-"};
String[] b={"b+","b-"};
String[] c={"c+","c-"};
String[] d={"d+","d-"};//需要调整的就是这里的参数
for(int i1=0;i1<1;i1++){//代表a
for(int i2=0;i2<1;i2++){//代表b
for(int i3=1;i3<2;i3++){//代表c
for(int i4=0;i4<2;i4++){//代表d
System.out.println(a[i1]+" "+b[i2]+" "+c[i3]+" "+d[i4]);
}
}
}
}
String[] a = { "a+", "a-" };
String[] b = { "b+", "b-" };
String[] c = { "c+", "c-" };
String[] d = { "d+", "d-" };
for (int i1 = 0; i1 < 2; i1++) {// 代表a
for (int i2 = 0; i2 < 2; i2++) {// 代表b
for (int i3 = 0; i3 < 2; i3++) {// 代表c
for (int i4 = 0; i4 < 2; i4++) {// 代表d
//这里添加判断条件
//首先i3==2表示为c-,i1==1||i2==1表示a+或者b+
if(i3==1&&(i1==0||i2==0)){
System.out.println(a[i1]+","+b[i2]+","+c[i3]+","+d[i4]);
}
}
}
}
}
结果:
a+,b+,c-,d+
a+,b+,c-,d-
a+,b-,c-,d+
a+,b-,c-,d-
a-,b+,c-,d+
a-,b+,c-,d-
String c = "C-";
String[] b = new String[] { "B+", "B-" };
String[] d = new String[] { "D+", "D-" }; StringBuffer bBuffer = new StringBuffer();
StringBuffer dBuffer = new StringBuffer(); for (String bStr : b) {
if (!bBuffer.toString().contains(bStr.substring(0, 1))) {
bBuffer.append(a).append(bStr);
}
for (String dStr : d) {
if (!dBuffer.toString().contains(dStr.substring(0, 1))) {
dBuffer.append(c).append(dStr);
System.out.println(bBuffer.toString() + dBuffer.toString());
dBuffer = new StringBuffer();
}
}
bBuffer = new StringBuffer();
}
}
String[] a = new String[] { "A+", "A-" };
String[] b = new String[] { "B+", "B-" };
String[] d = new String[] { "D+", "D-" }; StringBuffer aBuffer = new StringBuffer();
StringBuffer bBuffer = new StringBuffer();
StringBuffer dBuffer = new StringBuffer(); for (String aStr : a) {
if (!aBuffer.toString().contains(aStr.substring(0, 1))) {
aBuffer.append(aStr);
}
for (String bStr : b) {
if (!bBuffer.toString().contains(bStr.substring(0, 1)) && ("A+".equals(aStr) || "B+".equals(bStr))) {
bBuffer.append(bStr);
for (String dStr : d) {
if (!dBuffer.toString().contains(dStr.substring(0, 1))) {
dBuffer.append(c).append(dStr);
System.out.println(aBuffer.toString() + bBuffer.toString() + dBuffer.toString());
dBuffer = new StringBuffer();
}
}
}
bBuffer = new StringBuffer();
}
aBuffer = new StringBuffer();
}
}结果:
A+B+C-D+
A+B+C-D-
A+B-C-D+
A+B-C-D-
A-B+C-D+
A-B+C-D-
这边有人给的思路是 先把所有的A、B、C、D组合也就是16情况算出来, 再 一个一个的过滤看是否满足指定的条件.
http://bbs.csdn.net/topics/390481028?page=1#post-394701070