假設(shè)兩種糖果分別是 A 和 B,數(shù)量分別為 9 和 16?,F(xiàn)在要將這些糖果分給 7 個小朋友,問有幾種不同的分法?
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了惠城免費建站歡迎大家使用!
這是一個組合問題,可以使用數(shù)學(xué)公式解決。計算方法如下:
首先,將 A 和 B 的數(shù)量相加得到 9+16=25。
然后,將 25 個糖果分給 7 個小朋友,每個小朋友至少分到一個糖果。這個問題可以轉(zhuǎn)化為將 25 個糖果分給 7 個小朋友,允許有 0 個糖果的小朋友。這是一個經(jīng)典的 "分配問題",可以使用組合數(shù)學(xué)中的 "第二類斯特林數(shù)" 解決。公式為:S(25,7)。
因此,將 25 個糖果分給 7 個小朋友的不同分法共有 S(25,7) 種,計算結(jié)果為:
S(25,7) = 2042975
因此,將兩種分別有 9 個和 16 個糖果的糖果分給 7 個小朋友的不同分法有 2042975 種。
1、首先我來整理下這到題,抽取主要提干
a=4 和 b=7 最大不能組合出來的數(shù)是c= 17
a=3 和 b=5 最大不能組合出來的數(shù)是c= 7
當(dāng)a b值任意 求c值
2、java 代碼
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class T_1796140699890495867html {
public static void main(String[] args) throws Exception {
//輸出段
BufferedReader brKey = new BufferedReader(new InputStreamReader(System.in));
System.out.println("用戶輸入:");
String strNum = brKey.readLine();
String[] oneAndTwoNums = strNum.split(" ");
brKey.close();
//處理段
int boxOne,boxTwo,impNum,bufNum;
boxOne = Integer.valueOf(oneAndTwoNums[0]);
boxTwo = Integer.valueOf(oneAndTwoNums[1]);
//如果第一個數(shù)大于第二個數(shù),那么調(diào)換位置
if(boxTwo boxOne){
boxOne = boxOne + boxTwo;
boxTwo = boxOne - boxTwo;
boxOne = boxOne - boxTwo;
}
//預(yù)定義值
impNum = boxOne * boxTwo;
//臨時計算數(shù)
bufNum = impNum;
while(bufNum = 0){
if(bufNum % boxOne == 0){
bufNum = (-- impNum);
}else if(bufNum % boxTwo == 0){
bufNum = -- impNum;
}else{
bufNum -= boxTwo;
}
}
//輸出段
System.out.println("程序應(yīng)該輸出:");
System.out.println(impNum);
}
}
3、運行截圖
初步做了一個出來,但是效率并不是很高,前100個計算速度還可以,但是往后就很慢了。如果什么時候有空的話可以再看看,先給你代碼吧,不知道能不能幫上你
public?class?AlisandaNumber?{
private?static?final?int?MAX_INDEX?=?1000;?//?可以先把這個常量改為1-6,驗證正確性
public?static?void?main(String[]?args)?{
int?a?=?0;
int?index?=?0;
while(index??MAX_INDEX)?{
a?+=?6;?//?每次循環(huán)自增6,由題目規(guī)律可知A是6的倍數(shù)
boolean?breakOut?=?false;
//?最大的約數(shù)為此數(shù)的平方根,因為如果是兩個平方根相乘的話,剩下的就只有1了
int?maxNum?=?(int)?Math.ceil(Math.sqrt(a));
p:
for(int?p?=?1;?p?=?maxNum;?p?++)?{
if(a?%?p?!=?0)?{
continue;?//?如果不是約數(shù)的話,沒必要考慮,下同
}
//?最大約數(shù)為平方根的相反數(shù),原理同上
maxNum?=?(int)?Math.ceil(Math.sqrt(a?/?p));
for(int?q?=?-1;?q?=?-maxNum;?q?--)?{?//?q和r必為負數(shù)
if(a?%?q?!=?0)?{
continue;
}
int?r?=?a?/?(p?*?q);
int?nonZero?=?p?*?q?+?p?*?r?+?q?*?r;
if?(nonZero?==?0)?{
continue;
}
if((a?==?p?*?q?*?r)??(a?==?(p?*?q?*?r)?/?(nonZero)))?{
index?++;
breakOut?=?true;
break?p;?//?跳出外層循環(huán)
}
}
}
if(breakOut)?{
System.out.println(String.format("第%d個壓力山大數(shù)是%d",?index,?a));
}
}
}
}
/**
*?@(#)Eat_Candy.java
*
*
*?@author?
*?@version?1.00?2013/10/17
*/
import?java.util.*;
import?java.math.*;
public?class?Eat_Candy?{
/**
?*?Creates?a?new?instance?of?codeEat_Candy/code.
?*/
//?public?Eat_Candy()?{
//?}
/**
?*?@param?args
?*????????????the?command?line?arguments
?*/
public?static?void?main(String[]?args)?{
Scanner?reader?=?new?Scanner(System.in);
long?number?=?reader.nextLong();
long?size?=?reader.nextLong();
long?sum?=?0,?max?=?0,?b?=?0;
b?=?reader.nextLong();
for?(long?j?=?0;?j??number;?j++)?{
if?(size??0?||?size??1000000)
break;
for?(long?i?=?0;?i??size;?i++)?{
sum?+=?b;
if?(b??max)?{
max?=?b;
}
}
if?(sum?-?max?+?1l?=?max)?{
System.out.println("YES");
}?else
System.out.println("NO");
}
//?TODO?code?application?logic?here
}
}