阿里一道抽奖游戏算法题水解。

来源:互联网 发布:阿里云解析内网ip 编辑:程序博客网 时间:2024/04/28 03:06

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));                }            }        }    }}

这个代码写的挺粗糙的,有待优化。

原创粉丝点击