在(0, S)之间随机生成N-1个正整数,然后计算N+1个数,相邻的两个数在数轴上的线段,这样便得到N个正整数,且和为S。
实现:
import java.util.Random;
import java.util.Scanner;
public class RandomNS {
private static Random rand = new Random();
private void find(int n, int s) {
int[] res = new int[s];
while(n > 0) {
int i = rand.nextInt(s-1)+1;
if(res[i] != 1) {
res[i] = 1;
n --;
}
}
int previous = 0;
for(int i = 0; i < res.length; i ++) {
if(res[i] == 1) {
System.out.print((i - previous) + " ");
previous = i;
}
}
System.out.println(s-previous);
}
public static void main(String[] args) {
RandomNS ns = new RandomNS();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int s = in.nextInt();
int[] a = new int[n+1];
a[0] = 0;
ns.find(n-1, s);
}
}
注意这里生成的N个随机正整数存在重复的数,考虑着N个数都不相同的情况。。