![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
2个回答
展开全部
问题描述,如下
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的数字, 还是不符合要求, 感觉你分析思路很不错, 对我帮助很大
展开全部
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之间,你指哪个范围
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询