JAVA怎样随机生成10W个数字, 要求: 10W个数字总等于50W而且每个数字最小1最大100, 求代码及思路

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA怎样随机生成10W个数字, 要求: 10W个数字总等于50W而且每个数字最小1最大100, 求代码及思路相关的知识,希望对你有一定的参考价值。

雪地跪求大神指点, 感激不尽

问题描述,如下
1 随机10w个数
2 范围 1<=n<=100
3 总和50w,即平均5
问题简化为:10w个数分解成若干个随机过程,每个过程的到数[1,100]的平均值为5
从随机的角度来讲,这个过程不好确定。(你的题目确实是这样的吗)
如果总和为500w,平均即50,那么每2个数作为一个随机过程:假设随机数为23,则另一个(100-23),平均为50,
执行5w次该过程即可(另:如果范围1~10同理)

/**
     * 适合每2个数一个随机过程
     * @param times   次数
     * @param sum     总和
     * @param min     范围下
     * @param max     范围上
     * @return int[]  数组
     */
    public int[] randomw(int times, int sum, int min, int max) 
        int[] result = new int[times];
        int avg = sum / times;
        for (int i = 0; i < times; i++) 
            int r = (int) (Math.random() * (max - min)) + min;
            result[i++] = r;
            result[i] = 2 * avg - r;
        
        return result;
    

追问

辛苦了, 我试了一下生成是数组里面有小于1的数字, 还是不符合要求, 感觉你分析思路很不错, 对我帮助很大

参考技术A import java.util.Arrays;
import java.util.Random;

public class Test 

    public static void main(String[] args) 
        int[] arr = new int[100000];
        Arrays.fill(arr, 1);
        Random r = new Random();
        for(int i=0;i<500000-arr.length;i++)
            int index = r.nextInt(arr.length);
            if(arr[index]<100)
                arr[index]++;
            else
                i--;
            
        
    



arr中的数就是我们要的

追问

谢谢, 好像不行, 生成的数字总和虽然对, 但数字值的范围不符合要求

追答

每个数都是1到100之间,你指哪个范围

追问

但是运行代码10W个数字没有一个是100的

生成随机W字符

  1.  

以上是关于JAVA怎样随机生成10W个数字, 要求: 10W个数字总等于50W而且每个数字最小1最大100, 求代码及思路的主要内容,如果未能解决你的问题,请参考以下文章

Java 数据结构与算法-Map和Set的OJ题

同样是高级开发,Java怎么比C/C++还多10w?

面试题:如何造10w条测试数据,在数据库插入10w条不同数据

就这几个简单页面APP,这混小子要我10W块?!大家评评理!

登顶了!“211大学生”在“银四”收割了 8 个大厂 offer,完全依仗这份《Java 10W 字 + 面试总结》

Redis过期策略