十个随机数,相加之和等于100,怎么分成相加之和等于50的两组

全局文档编号:1451

一、背景

一个朋友问了我这样一个问题:十个随机自然数,相加之和等于100,怎么分成和等于50的两组?觉得挺有意思,就写代码玩了一下。

二、思路故事

一个家庭有10个小孩,家里的苹果树上结了100个苹果,我们需要将小孩随意分成2组(每组人数1-9),要求两个组都分到50个苹果

  1. 将10个小孩随意分成两组,A和B
  2. A组进行50次苹果分配,随机点一个小孩,分给他
  3. B组同理进行50次苹果分配,随机点一个小孩,分给他
  4. 分组完毕

三、Java代码实现


/**
* @author wangyao
* @date 2020-5-21 15:57
* @description: 需求:十个随机数,相加等于100,怎么分成相加之和等于50的两组
*/
public class AlgorithmTest {
    public static void main(String[] args) {
        /**
         * 算法实现描述
         * 1、设置两个数组A,B,A数组大小1-9随机,假设a,另一个数组10-a
         * 2、针对A数组进行50次循环,每次任取一个数组元素+1
         * 3、针对B数组进行50次循环,每次任取一个数组元素+1
         * 4、打印分组结果
         */
        System.out.println("要求:十个随机数,相加等于100,我要分成相加之和等于50的两组...");
        System.out.println();
        System.out.println("分完啦!");
        Random r = new Random();
        int aLength = 0;
        while (aLength == 0) {
            aLength = r.nextInt(10);
        }
        int[] a = new int[aLength];
        int[] b = new int[10-aLength];
        for (int i = 0; i < 50; i++) {
            int luckyGuyInA = r.nextInt(aLength);
            a[luckyGuyInA]++;
            
            int luckyGuyInB = r.nextInt(10 - aLength);
            b[luckyGuyInB]++;
        }
        
        
        System.out.print("A组数据:");
        int sumA = 0,sumB = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = 0 ; i < aLength; i++) {
            sumA += a[i];
            System.out.print(a[i] + "  ");
            sb.append(a[i] + "  ");
        }
        System.out.println();
        System.out.println("和:" + sumA);
        
        System.out.print("B组数据:");
        for (int i = 0 ; i < 10-aLength; i++) {
            sumB += b[i];
            System.out.print(b[i] + "  ");
            sb.append(b[i] + "  ");
        }
        System.out.println();
        System.out.println("和:" + sumB);
    
        System.out.println("10个随机数分别是:" + sb.toString());
    }
}

猜你喜欢

转载自www.cnblogs.com/6da6da/p/12944882.html