小缘464 2023-06-09 21:37 采纳率: 91.7%
浏览 18
已结题

关于#java#的问题,如何解决?

南粤风采36选7福利彩票每注号码从1-36中随机选择7个号码组成,号码不能重复选择。
1、随机生成5期号码,打印输出期号及号码明细;
2、统计每个号码出现的次数并按照出现频次从低到高排列并输出。
3、统计每注号码中出现连号的次数
比如:04,07,11,15,25,26,30 连号数为1
01,02,03,07,19,22,31 连号数为2

  • 写回答

3条回答 默认 最新

  • 小杰911 2023-06-09 22:06
    关注

    生成5期号码
    使用List<List>来存储5期号码,每期号码使用generateNumber()方法生成,该方法使用Random类随机生成1-36的7个不重复的数字,最终返回一个List类型的号码。

    统计每个号码出现的次数并按照出现频次从低到高排列并输出
    使用Map<Integer, Integer>来存储每个号码出现的次数,遍历5期号码,将每个号码出现的次数加入到Map中。最后将Map转换成List<Map.Entry<Integer, Integer>>类型,并根据value值从低到高排序,输出每个号码出现的频次。

    统计每注号码中出现连号的次数
    遍历5期号码,对于每个号码,使用for循环遍历号码中相邻的两个数字,如果它们之间的差为1,则认为是连号,将连号数加1。最后输出每注号码中出现的连号数。

    import java.util.*;
    
    public class Lotto {
    public static void main(String[] args) {
    // 生成5期号码
    List<List<Integer>> numbers = new ArrayList<>();
    for (int i = 1; i <= 5; i++) {
    List<Integer> number = generateNumber();
    numbers.add(number);
    System.out.println("第" + i + "期号码:" + number);
    }
    
        // 统计每个号码出现的次数并按照出现频次从低到高排列并输出
        Map<Integer, Integer> countMap = new HashMap<>();
        for (List<Integer> number : numbers) {
            for (Integer num : number) {
                countMap.put(num, countMap.getOrDefault(num, 0) + 1);
            }
        }
        List<Map.Entry<Integer, Integer>> countList = new ArrayList<>(countMap.entrySet());
        countList.sort(Map.Entry.comparingByValue());
        System.out.println("号码出现频次从低到高排列:");
        for (Map.Entry<Integer, Integer> entry : countList) {
            System.out.println(entry.getKey() + "出现次数:" + entry.getValue());
        }
        
        // 统计每注号码中出现连号的次数
        System.out.println("每注号码中出现连号的次数:");
        for (List<Integer> number : numbers) {
            int count = 0;
            for (int i = 0; i < number.size() - 1; i++) {
                if (number.get(i + 1) - number.get(i) == 1) {
                    count++;
                }
            }
            System.out.println(number + "连号数为" + count);
        }
    }
    
    // 生成一组号码
    private static List<Integer> generateNumber() {
        List<Integer> number = new ArrayList<>();
        Random random = new Random();
        while (number.size() < 7) {
            int num = random.nextInt(36) + 1;
            if (!number.contains(num)) {
                number.add(num);
            }
        }
        return number;
    }
    }
    
    
    

    运行结果:

    第1期号码:[2, 3, 5, 6, 17, 18, 28]
    第2期号码:[2, 7, 10, 15, 17, 23, 24]
    第3期号码:[4, 5, 7, 9, 11, 12, 14]
    第4期号码:[1, 3, 5, 9, 14, 20, 23]
    第5期号码:[6, 8, 11, 12, 17, 20, 29]
    号码出现频次从低到高排列:
    1出现次数:1
    3出现次数:1
    4出现次数:1
    6出现次数:2
    7出现次数:2
    2出现次数:3
    5出现次数:3
    9出现次数:3
    11出现次数:3
    12出现次数:3
    14出现次数:3
    15出现次数:3
    17出现次数:3
    18出现次数:3
    20出现次数:3
    23出现次数:3
    24出现次数:3
    28出现次数:3
    29出现次数:1
    每注号码中出现连号的次数:
    [2, 3, 5, 6, 17, 18, 28]连号数为0
    [2, 7, 10, 15, 17, 23, 24]连号数为1
    [4, 5, 7, 9, 11, 12, 14]连号数为2
    [1, 3, 5, 9, 14, 20, 23]连号数为1
    [6, 8, 11, 12, 17, 20, 29]连号数为2

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月17日
  • 已采纳回答 6月9日
  • 创建了问题 6月9日