java中具有固定平均值的随机整数数组
我需要创建一个随机整数数组,它们的和是1000000,这些数字的平均值是3。数组中的数字可以重复,数组的长度可以是任意数字 我能找到随机整数的数组,它们的和是1000000java中具有固定平均值的随机整数数组,java,arrays,algorithm,random,Java,Arrays,Algorithm,Random,我需要创建一个随机整数数组,它们的和是1000000,这些数字的平均值是3。数组中的数字可以重复,数组的长度可以是任意数字 我能找到随机整数的数组,它们的和是1000000 ArrayList<Integer> array = new ArrayList<Integer>(); int a = 1000000; Random rn = new Random(); while (a >= 1) { int an
ArrayList<Integer> array = new ArrayList<Integer>();
int a = 1000000;
Random rn = new Random();
while (a >= 1)
{
int answer = rn.nextInt(a) + 1;
array.add(answer);
a -= answer;
}
但是,我不知道如何找到平均数为3的随机数。我将横切列表两次,如果这两个位置的整数相加并除以2==3,则返回,否则,增加整数。我将横切列表两次,如果这两个位置的整数相加并除以2==3,则返回,否则,增加整数。这在数学上是不可能的:
您正在查找n个值,其总和为1000000,它们的平均值为3,即1000000/n。因为n只能取整数值,所以这是不可能的。这在数学上是不可能的:
您正在查找n个值,其总和为1000000,它们的平均值为3,即1000000/n。因为n只能取整数值,所以这是不可能的。我认为您需要编写一个简单的平均函数,如:
public double average(ArrayList<Integer> array){
long sum = 0;
int count = 0;
for (Integer item : array){
sum += item;
count++;
}
return sum/count;
}
我认为您需要编写一个简单的平均函数,如:
public double average(ArrayList<Integer> array){
long sum = 0;
int count = 0;
for (Integer item : array){
sum += item;
count++;
}
return sum/count;
}
正如Göker Gümü351;所说,从数学上讲,平均数不可能精确到3,总和不可能精确到100万 平均值=元素的总和/数量。 这意味着元素数量=总和/平均值 在这种情况下,它需要1000000/3=3333个元素。因为一个元素不能有三分之一的值为3,这意味着你的平均值或总和需要稍微偏离你的目标值才能匹配。
所需的不太显著的差异肯定是平均值,因为它只需要百万分之一个单位,即3.000001,你就可以有333333个元素的总和为1000000,正如Göker Gümş所说,从数学上讲,平均值不可能精确为3,总和为一百万 平均值=元素的总和/数量。 这意味着元素数量=总和/平均值 在这种情况下,它需要1000000/3=3333个元素。因为一个元素不能有三分之一的值为3,这意味着你的平均值或总和需要稍微偏离你的目标值才能匹配。
所需的不太明显的差异肯定是平均值,因为它只需要百万分之一个单位,即3.000001,您就可以将333333个元素相加为1000000个元素。这个问题有很多答案,但假设我们希望我们的随机数最多为10个,我们可以更改。我想这会给出一个令人满意的答案
import java.util.Random;
导入java.util.ArrayList
公开课平均分{
public static void main(String[] args) {
Random random = new Random();
ArrayList<Integer> arr = new ArrayList<Integer>();
double sum = 0;
double avg = 0;
int k = 1;
while (sum < 1000000) {
avg = sum / k;
if (avg < 3) {
int element = random.nextInt(10)+1;
sum += element;
arr.add(element);
k++;
} else {
int element = random.nextInt(3)+1;
sum += element;
arr.add(element);
k++;
}
}
System.out.println(arr);
System.out.println(sum);
System.out.println(avg);
}
}这个问题有很多答案,但假设我们希望我们的随机数最大为10,我们可以更改。我想这会给出一个令人满意的答案
import java.util.Random;
导入java.util.ArrayList
公开课平均分{
public static void main(String[] args) {
Random random = new Random();
ArrayList<Integer> arr = new ArrayList<Integer>();
double sum = 0;
double avg = 0;
int k = 1;
while (sum < 1000000) {
avg = sum / k;
if (avg < 3) {
int element = random.nextInt(10)+1;
sum += element;
arr.add(element);
k++;
} else {
int element = random.nextInt(3)+1;
sum += element;
arr.add(element);
k++;
}
}
System.out.println(arr);
System.out.println(sum);
System.out.println(avg);
}
}如果将它们约束为平均值和随机值,则必须将它们约束为值范围。中位数为3的1到5的范围似乎是合理的。同样合理的是平滑分布,它给出了已知的总数和平均数 这段简单的代码将完成以下所有功能:
List<Integer> numbers = new ArrayList<>(333334); // 1000000 / 3
// one instance of 5 must be omitted to make total exactly 1000000
numbers.addAll(Arrays.asList(1, 2, 3, 4));
for (int i = 0; i < 333330; i++)
numbers.add((i % 5) + 1); // add 1,2,3,4,5,1,2,3,4,5,etc
Collections.shuffle(numbers);
// Check sum is correct
numbers.stream().reduce((a,b) -> a + b).ifPresent(System.out::println);
请注意,当总数为1000000时,平均数在数学上不可能精确为3,因为1000000/3的余数为1/3,但此代码非常接近:
1000000/333334 => 2.999994
如果将它们约束为平均值和随机值,则必须将它们约束为值范围。中位数为3的1到5的范围似乎是合理的。同样合理的是平滑分布,它给出了已知的总数和平均数 这段简单的代码将完成以下所有功能:
List<Integer> numbers = new ArrayList<>(333334); // 1000000 / 3
// one instance of 5 must be omitted to make total exactly 1000000
numbers.addAll(Arrays.asList(1, 2, 3, 4));
for (int i = 0; i < 333330; i++)
numbers.add((i % 5) + 1); // add 1,2,3,4,5,1,2,3,4,5,etc
Collections.shuffle(numbers);
// Check sum is correct
numbers.stream().reduce((a,b) -> a + b).ifPresent(System.out::println);
请注意,当总数为1000000时,平均数在数学上不可能精确为3,因为1000000/3的余数为1/3,但此代码非常接近:
1000000/333334 => 2.999994
我不明白你们在找什么,请强调你们的问题,有随机数的范围吗?他们应该都是积极的吗?包括零吗?@RoeyGolzarpoor抱歉,如果这个问题解释得不够清楚的话。你不明白哪一部分?简单地说,我需要生成随机数,它们的和是1000 000,它们的平均值除以它们的和是3。@Bohemian,它们应该都是正的。如果和是1000000,平均值必须是3,那么你的数组必须有333个元素不准确,但尽可能接近。我不明白你们在找什么,请强调你们的问题有一系列随机数吗?他们应该都是积极的吗?包括零吗?@RoeyGolzarpoor抱歉,如果这个问题解释得不够清楚的话。你不明白哪一部分?简单地说,我需要生成随机数,它们的和是1000 000,它们的平均值除以o
f它们是3。@Bohemian,它们都应该是正的。如果总和是1000000,平均数必须是3,那么你的数组必须有333333个元素不精确,但尽可能接近。如果我们认为n等于333333,除了其中一个是4之外,所有元素都是3,那么总和将是1000000。int a=1000000/n在java中是3,但它们的实际平均值应该是3.00003000003。如果我们认为n等于333333,除了其中一个是4外,所有的都是3,总和应该是1000000。int a=1000000/n在java中是3。但是它们的实际平均值应该是3.00003000003。你能给你的答案添加一个解释吗?是的,每次我们向数组中添加一个新的数字时,我们都会检查平均值是否可以除以3,如果不能,我们就把它添加到你的答案中。请更好地解释一下。你能在你的答案中添加一个解释吗?是的,每次我们在数组中添加一个新的数字,我们都会检查平均数是否可以除以3,如果不能,我们将退出while循环,并将其添加到你的答案中。请解释清楚。