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, ...
4. **因果报应**:面包师因为怀疑农民而提起诉讼,结果却因为自己的砝码问题败诉,体现了因果循环的观念。这教导学生做事要公正,不要轻易怀疑他人,否则可能自食其果。 5. **法律意识**:故事中提到了法律诉讼,...
在计算机科学中,这类问题通常被称为“砝码问题”或“组合问题”。解决此类问题的方法是构建一个函数,该函数确定给定砝码如何组合以达到目标重量。在这个特定的情况下,我们可以使用动态规划来创建一个二维数组,...
类似的问题还有第2题“德·梅齐里亚克的砝码问题”,这是一道关于最小砝码配置的问题,它考验了对组合数学的认识。 在数论方面,第19题“费马—欧拉素数定理”探讨了素数分布的规律性,这是数论中研究素数性质的一...
"砝码程序算法"是一种在计算领域中用于解决特定问题的算法,特别是在循环语言学习中有着重要的应用。这种算法的设计灵感来源于物理中的砝码天平,通过比较不同重量的砝码来达到平衡或找到特定重量的目标。在编程中,...
在本课程中,我们主要探讨了动态规划在解决两个具体问题上的应用:钱币问题和砝码问题。 首先,钱币问题涉及到如何用最少数量的钱币组成特定的金额。例如,如果拥有面值为1、2、3、4、5、6的钱币,我们需要找出可以...
本文研究了基于PLC(可编程逻辑控制器)的电子吊秤砝码加载技术,通过将PLC自动控制技术与模糊滑模控制算法相结合,设计了一套自动加载控制装置,有效解决了传统砝码加载技术中存在的一系列问题。 一、砝码自动加载...
砝码问题通常涉及到二分查找或者动态规划,常用于解决平衡问题或者找寻最优化解。在实际应用中,例如在电子秤的精度校准或物品重量估计中,我们可以使用砝码进行精准衡量。源码可能展示了如何通过递归或迭代的方式...
与砝码问题不同的是,这里的每种邮票可以使用无限多次。借助于母函数,这个问题同样可以得到解决。母函数模板在程序中的实现通常基于动态规划的方法,即通过迭代的方式逐步计算出组合的方案数。 在具体实现中,我们...
2. 德·梅齐里亚克的砝码问题:这是一个关于如何用最少数量的砝码称量不同重量物体的问题,涉及二进制逻辑和平衡原理,为后来的计算机科学奠定了基础。 3. 牛顿的草地与母牛问题:这是牛顿在解决实际问题时提出的,...
5. **训练五**:涉及货币组合问题和砝码问题,需要理解加法和乘法的组合效果。 四、课后作业: 1. **题目1**:比较两个除法表达式的大小,需要理解除法和乘法的关系。 2. **题目2**:考察乘法的连续性,通过比较...
10. 砝码问题的解决:砝码生锈会导致测量结果偏大,缺损则导致测量结果偏小。在实际操作中,应确保砝码完好无损以保证测量的准确性。 综上,本学案主要涉及了质量的基本概念、天平的使用方法、质量的特性以及如何...
2. **砝码问题**: 第二题是关于砝码的组合问题,需要学生理解不同砝码的组合可以表示的重量。1克、2克、4克的砝码可以单独使用,也可以两两或三个一起使用。要找出所有可能的重量组合,需要考虑每个砝码的所有可能...
11. 逻辑推理:砝码问题 这个问题需要你思考如何用 7 克、2 克砝码将 140 克的盐分成 50、90 克各一份。答案是:先用 7 克砝码称出 50 克,然后用 2 克砝码称出 40 克,剩下的 10 克可以用 7 克砝码称出。 12. ...