随机生成100w个数,取100个最大的出来

import java.util.Arrays;  
import java.util.PriorityQueue;  
import java.util.Random;  

public class Top100LargestNumbers {  
    public static void main(String[] args) {  
        // 创建一个随机数生成器  
        Random random = new Random();  
        // 创建一个数组来存储100万个随机数  
        int[] numbers = new int[1000000];  
        
        // 生成100万个随机数  
        for (int i = 0; i < numbers.length; i++) {  
            numbers[i] = random.nextInt(1000000) + 1; // 生成1到1000000之间的数  
        }  

        // 使用优先队列(最小堆)来找到前100个大的数  
        PriorityQueue<Integer> minHeap = new PriorityQueue<>(100);  
        
        for (int num : numbers) {  
            if (minHeap.size() < 100) {  
                minHeap.offer(num);  
            } else if (num > minHeap.peek()) {  
                minHeap.poll(); // 移除最小的数  
                minHeap.offer(num); // 添加当前数  
            }  
        }  

        // 将结果转换为数组并排序  
        Integer[] top100 = minHeap.toArray(new Integer[0]);  
        Arrays.sort(top100, (a, b) -> b - a); // 从大到小排序  
        
        // 打印前100个最大的数  
        System.out.println(Arrays.toString(top100));  
    }  
}

可以按照以下步骤设计该系统: 1. 导入random和decimal库,使用random库的random.uniform()函数生成1000个1到1000之间的随机数。 2. 使用decimal库的Decimal()函数将随机数转换为浮点数,并保留小数点后50位。 3. 将生成的浮点数存储到一个列表中,并将列表中的每个数转换为字符串格式。 4. 打开一个文件,将字符串格式的浮点数写入文件中。 5. 使用sorted()函数对列表中的浮点数进行排序,最小的10个数。 6. 使用for循环遍历这10个数,计算相邻两个数的差值,并找出差值最大的两个数。 下面是实现该系统的代码: ```python import random import decimal # 生成1000个1到1000之间的随机数 random_list = [random.uniform(1, 1000) for _ in range(1000)] # 将浮点数保留小数点后50位,并转换为字符串格式 decimal_list = [str(decimal.Decimal(str(num)).quantize(decimal.Decimal('0.00000000000000000000000000000000000000000000000001'))) for num in random_list] # 将字符串格式的浮点数写入文件 with open('random_numbers.txt', 'w') as f: f.write('\n'.join(decimal_list)) # 最小的10个数并输出 min_10 = sorted(decimal_list)[:10] print("最小的10个数:", min_10) # 计算相邻两个数的差值,并找出差值最大的两个数 diff_max = 0 diff_list = [] for i in range(len(min_10)-1): diff = abs(decimal.Decimal(min_10[i]) - decimal.Decimal(min_10[i+1])) diff_list.append(diff) if diff > diff_max: diff_max = diff max_pair = (min_10[i], min_10[i+1]) print("相差最大的两个数:", max_pair) ``` 该系统将生成的随机数保存到名为random_numbers.txt的文件中,并输出最小的10个数和相差最大的两个数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值