本帖最后由 hanxing 于 2014-11-10 15:42 编辑
分别是26次随机数和为301
5次和为20
5次和为40的运算结果,当然,就像我上面说的,如果可以重复,看上去就不是我们想要的结果- import java.util.*;
- /*
- 如何生成m个数让其和等于n,求编程
- 假设生成26个非负随机数,要求其和是301,求生成此列数字!?
- */
- class TestDemo3
- {
- public static void main(String[] args)
- {
- getRandomNum(301,26);
- getRandomNum(20,5);
- getRandomNum(40,5);
- }
- public static void getRandomNum(int sum,int n)//sum为m个随机数的和
- { Random random=new Random();
- int temp=0,count=0,a=0;
-
- if(sum>0&&n>0&&sum>=n)
- {
- while(sum-temp>0)
- {
- //如果还差一次,且和还没有sum大最后一次随机数就是sum-temp
- if(count==n-1&&temp<sum)
- a=sum-temp;
- else
- {
- //本次随机数的范围随着和的增大而减小,n-count-1是后面次数和的最小值(每次都为1)
- //sum-temp-(n-count-1)为当前这个随机数能取到的最大值
- a =random.nextInt(sum-temp-(n-count-1))+1;
- }
- temp+=a;
- count++;
- if(count%10!=0)
- System.out.print(a+"\t");
- else
- System.out.println(a);//输出格式
- }
- }
- else
- {
- if(n<0) System.out.println("n不能为负数");
- if(sum<0&&sum<n) System.out.println("sum不能为负数,且必须不小于n");
- }
- System.out.println();
- System.out.println("--------------------------------------------------");
- }
- }
复制代码
|