返回

java-我找到了总的排列,但我需要帮助找出如何使用javascript来填充占用最少的兵营

发布时间:2022-07-18 01:40:53 381
# php

问题是“您能否考虑以下烫发/梳子问题并用 Javascript 编写一些东西来为给定的输入提供解决方案:返回家园的士兵选择睡在占用最少的营房,或者在多个营房联合最少占用的情况下,在从这些中随机选择。编写函数,将 S(士兵人数)和 B(营房数量)作为输入,并返回可能的睡眠安排的数量。

我发现了可能的总排列。例如,对于 3 名士兵和 2 个兵营,可能的总安排是 6。但是,问题要求我只包括最少占用兵营的士兵,所以正确答案是 4。我不知道如何在我的代码中反映这一点。我假设我会使用 IF 函数,但我不知道这是否正确或如何在这里使用正确的语法。我将不胜感激任何帮助!

//This is the code I wrote to calculate total permutations

import java.util.Random;   

public class Main {

/**
 * @param S The number of soldiers
 * @param B The number of barracks
 * @return Number of possible sleeping arrangements
 */
static public long PossibleArrangements(int S, int B) {
    /**
     * The number of possible sleeping arrangements will be
     * (https://imgur.com/gallery/Jrb9UUB)
     * 
     * It is assumed the answer lies in a 64 bit integer, otherwise we will have to take modulo
     */
    
    // No arrangments for 0 barracks
    if(B==0)return 0;

    // precompute the factorial array
    int n = Math.max(S, B);
    long []fact = new long[n+1]; 
    fact[0]=1;
    for(int i=1;i<=n;i++){
        fact[i]=fact[i-1]*i;
    }

    // calculate result
    long result=1;
    result*=fact[S];
    result*=fact[B];

    for(int i=0;i<B;i++){
        int add=0;
        if(S%B > i)add=1;
        result/=fact[S/B+add];
    }

    return result;
}


/** 
 * @return A random integer between 1 to 10
 */
static public int getRandomNumber(){
    Random random = new Random();
    return random.nextInt(10)+1;
}

public static void main(String[] args) {

    /**
     * There will only be two arrangements possible for 2 soldiers and 2 barracks
     */
    System.out.println(PossibleArrangements(2,2));
    /**
     * There will be 6 arrangements possible for 3 soldiers and 2 barracks
     * 
     *  S1->B1 , S2->B1 , S3->B2
     *  S1->B1 , S2->B2 , S3->B1
     *  S1->B2 , S2->B1 , S3->B1
     *  S1->B2 , S2->B2 , S3->B1
     *  S1->B2 , S2->B1 , S3->B2
     *  S1->B1 , S2->B2 , S3->B2
     */
    System.out.println(PossibleArrangements(3,2));

    /**
     * Possible arrangements for random number of Soldiers and Barracks
     */
    System.out.println(PossibleArrangements(getRandomNumber(),getRandomNumber()));
}

}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像