import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class Demo {
/*
* 砝码问题:
* 现有一组砝码,重量互不相等,分别为m1、m2……mn;他们可取的最大数量分别为x1、x2……xn
* 现在要用这些砝码去称物体的重量,问能称出多少中不同的重量
*
* 输入:
* int n:n表示有多少组重量不同的砝码,1<=n<=10
* int[] weight:表示n组砝码的重量,1<=mi<=10
* int[] nums:表示n组砝码的最大数量,1<=xi<=10
*
* 输出:
* 只有一个数据,表示利用给定的砝码可以称出的不同的重量数;非法数据输出-1
*
* 注:
* 称重重量包括0
* 要对输入数据进行校验
*/
public static int fama(int n, int[] weight, int[] nums) {
if (!isRightInput(n,weight,nums)) {
return -1;
}
//可以称的重量
Set<Integer> weightSet = new HashSet<Integer>();
int[] count = new int[nums.length];
while(arrrayInc(count,nums,count.length - 1)){
int weights = 0;
for (int i = 0; i < count.length; i++) {
weights += weight[i] * count[i];
}
weightSet.add(weights);
}
return weightSet.size() + 1;//加重量为0的
}
public static boolean arrrayInc(int[] count,int[] nums,int flag){
if(flag < 0){
return false;
}
count[flag] ++;
if(count[flag] > nums[flag]){
count[flag] = 0;
flag --;
return arrrayInc(count,nums,flag);
}
return true;
}
//校验输入参数
public static boolean isRightInput(int n, int[] weight, int[] nums){
//判断 n 的取值范围
if(n > 10 || n <= 0){
return false;
}
//判断空指针
if(weight == null || nums == null){
return false;
}
//判断数字大小不等于n
if(weight.length != n || nums.length != n){
return false;
}
Set<Integer> set = new HashSet<Integer>();
//判断数据元素取值范围
for (int i = 0; i < nums.length; i++) {
if(weight[i] > 10 || weight[i] <= 0 || nums[i] > 10 || nums[i] <= 0){
return false;
}
set.add(weight[i]);
}
//判断砝码有是否有重复的
if (set.size() != weight.length) {
return false;
}
return true;
}
}
分享到:
相关推荐
砝码问题 Problem 有一组砝码,重量互不相等,分别为m1、m2、m3……mn;它们可取的最大数量分别为x1、x2、x3……xn。 现要用这些砝码去称物体的重量,问能称出多少种不同的重量。 Input 第一行为一整数t,表示有t...
这是用C语言解决的破碎的砝码问题的源代码,有兴趣的算法初学者可以看看
C语言解决砝码组合问题,采用递归的方法解决,寻找递推关系便可以解决这个问题了
用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量
[砝码称重问题]给定一架天平,要求用m个砝码称出1~n克范围内的所有物品的重量 ,问应该如何选择砝码~
砝码问题: 设有1g,2g,3g,5g,10g,20g的砝码各若干枚(其总重),要求: 输入:a1,a2,a3,a4,a5,a6(表示1g的砝码有a1个,2g的砝码有a2个. ……20g的砝码有a6个) 输出:Total=n(n表示这些砝码能称出的不同重量的个数,...
天平称物问题。用四个砝码实现1-40克任意物体的称量。求出砝码的质量。
17枚同质硬币中有1枚假币,仅知假币与真币重量不同。可用工具是1台没有砝码的天平,设计找出假币的方案并进行讨论。
五十一、砝码 33 五十二、杨辉三角 34 五十三、图论的一些定理: 37 五十四、二部图 38 五十五、排列组合问题 39 五十六、计数问题 39 五十七、微积分公式 41 五十八、三角函数公式 43 五十九、空间解析几何和向量...
砝码称重问题! 用1,2,5,10,20,50的砝码称出1到88的物重
西门子称重模块技术问题5zip,西门子称重模块技术问题5:如何通过SIWATOOL MS软件标定 SIWAREX MS称重模块 ? 如何通过SIWATOOL MS软件标定 SIWAREX MS称重模块? 解答: 所需硬件和软件如下: SIWAREX MS 模块, S7-200 ...
从理论上分析了静重式力标准机...据此建立了控制模型,研究了其中的控制问题,并进行了倒码实验。结果表明,对祛码倒换的力学原理的理论分析和基于此的控制模型是正确、有效的,利用该模型控制倒码造成的力值波动不大于2%。
问题: 如何使用 SIWATOOL CS 校准 SIWAREX CS ? 解答: 构成一个带称的 ET200S 站需要下列硬件和软件:SIWAREX CS 模块, 30mm 端子模块, IM151 Profibus 或 Profinet, 电源模块,电源模块的端子块, SIWATOOL CS...
砝码的磁性对于砝码质量值测量的影响越来越受到人们的重视.比较了3种磁性测量的方法及磁化率和磁场强度不确定度分量,指出其与微克质量标准磁性测量中的不同,进而提出一个测量弱磁性微克质量标准磁化率的方法....
24V 电源,S7-300 CPU 或 ET200M 站, CPU 用内存卡,SIWAREX U, SIWAREX U 前连接器, SIWATOOL U 软件,RS232 电缆, 带 Windows XP 或更高系统的电脑和一个大于所有称重元件标称值总和 5% 的砝码。 .
突出的解决问题能力 强大的编程技能能力 优秀的团队合作能力与领导力 参加美赛的话既可以熟练的外文文献阅读能力、以及优秀的英文写作能力。同时还可以对评奖评优,保研加分增加砝码。 2023美赛在即,为帮助大家...
四分砝码.c 圆周率 多位阶乘2.c 多位阶乘.c 大加数.c 大小倍约.c 大整数.c 完数.c 小孩分糖果.c 小明买书 平方根.c 数学算法 桃子猴问题 灯塔问题.c 百鸡百钱.c 简单计算器.c 苹果纠纷 递推.c 逻辑移动.c 阶乘递归.c...
针对智能传感器自校正的问题,构建了基于IEEE1451智能传感器校正引擎的校正模型,优化了校正公式,阐述了曲线拟合法的基本原理。然后以应变式称重传感器为实例,描述了其工作机理,并分析误差产生的原因,以曲线拟...
解压后包括: mod 4 最优路径问题.doc 城市交通.doc 乘积最大.doc 砝码称重.doc