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()));
}
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报