1.一个抽奖游戏,有7个连续整数的球(比如1,2,3,4,5,6,7),连续随机抽取3个,如果连续抽取的两个球是连续的,则中奖,问中奖几率多大?
思路
首先顺着遍历,找出所有两个相邻的连续数,第三个数比前两个数都大。
第三个数的位置可能在首位,可能在末尾。
然后逆着遍历,找出所有两个相邻的连续数,第三个数比前两个数都小。
第三个数的位置可能在首位,可能在末尾。
以上遍历一共找出120种情况,放入list进行去重,得到最终结果。
import java.util.ArrayList;
import java.util.List;
public class TestA {
public static void main(String[] args) {
int cout = 0;
List<String> list = new ArrayList<>();
// 顺着来
for (int i = 1; i <= 7; i++) {
for (int j = 1; j <= 7; j++) {
if (i != j && i - j == 1 || i - j == -1) {
int m = 0;
if (i > j) {
m = i + 1;
} else {
m = j + 1;
}
for (; m <= 7; m++) {
System.out.println("i:" + i + " j:" + j + " m:" + m);
// String s1 = "i:" + i + " j:" + j + " m:" + m;
String s1 = "" + i + "" + j + "" + m;
list.add(s1);
cout++;
System.out.println("m:" + m + " i:" + i + " j:" + j);
String s2 = "" + m + "" + i + "" + j;
list.add(s2);
cout++;
}
}
}
}
// 倒着来
for (int i = 7; i >= 1; i--) {
for (int j = 7; j >= 1; j--) {
if (i != j && i - j == 1 || i - j == -1) {
int m = 7;
if (i > j) {
m = j - 1;
} else {
m = i - 1;
}
for (; m >= 1; m--) {
System.out.println("i:" + i + " j:" + j + " m:" + m);
String s1 = "" + i + "" + j + "" + m;
list.add(s1);
cout++;
System.out.println("m:" + m + " i:" + i + " j:" + j);
String s2 = "" + m + "" + i + "" + j;
list.add(s2);
cout++;
}
}
}
}
System.out.println(cout);
// 移除相同的
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(j).equals(list.get(i))) {
System.out.println(list.get(j) + "----------");
list.remove(list.get(j));
}
}
}
}
}
这个代码写的挺粗糙的,有待优化。