假设两种糖果分别是 A 和 B,数量分别为 9 和 16。现在要将这些糖果分给 7 个小朋友,问有几种不同的分法?
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了惠城免费建站欢迎大家使用!
这是一个组合问题,可以使用数学公式解决。计算方法如下:
首先,将 A 和 B 的数量相加得到 9+16=25。
然后,将 25 个糖果分给 7 个小朋友,每个小朋友至少分到一个糖果。这个问题可以转化为将 25 个糖果分给 7 个小朋友,允许有 0 个糖果的小朋友。这是一个经典的 "分配问题",可以使用组合数学中的 "第二类斯特林数" 解决。公式为:S(25,7)。
因此,将 25 个糖果分给 7 个小朋友的不同分法共有 S(25,7) 种,计算结果为:
S(25,7) = 2042975
因此,将两种分别有 9 个和 16 个糖果的糖果分给 7 个小朋友的不同分法有 2042975 种。
1、首先我来整理下这到题,抽取主要提干
a=4 和 b=7 最大不能组合出来的数是c= 17
a=3 和 b=5 最大不能组合出来的数是c= 7
当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]);
//如果第一个数大于第二个数,那么调换位置
if(boxTwo boxOne){
boxOne = boxOne + boxTwo;
boxTwo = boxOne - boxTwo;
boxOne = boxOne - boxTwo;
}
//预定义值
impNum = boxOne * boxTwo;
//临时计算数
bufNum = impNum;
while(bufNum = 0){
if(bufNum % boxOne == 0){
bufNum = (-- impNum);
}else if(bufNum % boxTwo == 0){
bufNum = -- impNum;
}else{
bufNum -= boxTwo;
}
}
//输出段
System.out.println("程序应该输出:");
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; // 每次循环自增6,由题目规律可知A是6的倍数
boolean breakOut = false;
// 最大的约数为此数的平方根,因为如果是两个平方根相乘的话,剩下的就只有1了
int maxNum = (int) Math.ceil(Math.sqrt(a));
p:
for(int p = 1; p = maxNum; p ++) {
if(a % p != 0) {
continue; // 如果不是约数的话,没必要考虑,下同
}
// 最大约数为平方根的相反数,原理同上
maxNum = (int) Math.ceil(Math.sqrt(a / p));
for(int q = -1; q = -maxNum; q --) { // q和r必为负数
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; // 跳出外层循环
}
}
}
if(breakOut) {
System.out.println(String.format("第%d个压力山大数是%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
}
}
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款