我需要在Java中随机生成一个具有7个插槽的数组。所有这些插槽的值都必须至少为1,但总和必须为另一个已定义数字的总和。它们也都必须是一个int值,没有1.5或0.9816465684646数字。例:
int a=10; int[] ar = new int[7] ar[0] = 1 ar[1] = 1 ar[2] = 2 ar[3] = 2 ar[4] = 1 ar[5] = 2 ar[6] = 1
我希望它生成类似的内容,但是如果int a = 15,则所有数字按任何顺序总计15
生成添加到给定总和的N个随机数的标准方法是将总和视为数字行,在该行上生成N-1个随机点,对其进行排序,然后将这些点之间的差用作最终值。要获得最小值1,请从您的总和中减去N,然后运行给定的算法,然后将1加回每个段。
public class Rand { public static void main(String[] args) { int count = 8; int sum = 100; java.util.Random g = new java.util.Random(); int vals[] = new int[count]; sum -= count; for (int i = 0; i < count-1; ++i) { vals[i] = g.nextInt(sum); } vals[count-1] = sum; java.util.Arrays.sort(vals); for (int i = count-1; i > 0; --i) { vals[i] -= vals[i-1]; } for (int i = 0; i < count; ++i) { ++vals[i]; } for (int i = 0; i < count; ++i) { System.out.printf("%4d", vals[i]); } System.out.printf("\n"); } }