`
tianshi_kco
  • 浏览: 22451 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

砝码问题

    博客分类:
  • java
 
阅读更多
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;
	}
}

分享到:
评论

相关推荐

    ACM 砝码问题 解答

    砝码问题 Problem 有一组砝码,重量互不相等,分别为m1、m2、m3……mn;它们可取的最大数量分别为x1、x2、x3……xn。 现要用这些砝码去称物体的重量,问能称出多少种不同的重量。 Input 第一行为一整数t,表示有t...

    破碎的砝码问题源码

    这是用C语言解决的破碎的砝码问题的源代码,有兴趣的算法初学者可以看看

    C语言砝码组合问题源码

    C语言解决砝码组合问题,采用递归的方法解决,寻找递推关系便可以解决这个问题了

    天平称重,砝码组合

    ### 天平称重,砝码组合 #### 知识点概述 本篇文章将围绕“天平称重,砝码组合”这一主题展开讨论。在实际应用中,我们需要使用尽可能少的砝码来准确地测量出不同的重量。本文将探讨如何通过特定的砝码组合来实现...

    C语言_砝码称重问题

    [砝码称重问题]给定一架天平,要求用m个砝码称出1~n克范围内的所有物品的重量 ,问应该如何选择砝码~

    NOIP培训教程(二)习题解析之动态规划

    在本文档中,我们关注的是两个具体的应用实例:砝码问题和整数拆分问题。 **砝码问题**是一个典型的动态规划问题,涉及到如何用不同重量的砝码组合称出所有可能的重量。题目给出的砝码重量为1g, 2g, 3g, 5g, 10g, ...

    初中语文文摘人生砝码

    4. **因果报应**:面包师因为怀疑农民而提起诉讼,结果却因为自己的砝码问题败诉,体现了因果循环的观念。这教导学生做事要公正,不要轻易怀疑他人,否则可能自食其果。 5. **法律意识**:故事中提到了法律诉讼,...

    fama.rar_fama

    在计算机科学中,这类问题通常被称为“砝码问题”或“组合问题”。解决此类问题的方法是构建一个函数,该函数确定给定砝码如何组合以达到目标重量。在这个特定的情况下,我们可以使用动态规划来创建一个二维数组,...

    100个著名初等数学问题.历史和解

    类似的问题还有第2题“德·梅齐里亚克的砝码问题”,这是一道关于最小砝码配置的问题,它考验了对组合数学的认识。 在数论方面,第19题“费马—欧拉素数定理”探讨了素数分布的规律性,这是数论中研究素数性质的一...

    砝码程序算法

    "砝码程序算法"是一种在计算领域中用于解决特定问题的算法,特别是在循环语言学习中有着重要的应用。这种算法的设计灵感来源于物理中的砝码天平,通过比较不同重量的砝码来达到平衡或找到特定重量的目标。在编程中,...

    动态规划第2课后半部分PPTX

    在本课程中,我们主要探讨了动态规划在解决两个具体问题上的应用:钱币问题和砝码问题。 首先,钱币问题涉及到如何用最少数量的钱币组成特定的金额。例如,如果拥有面值为1、2、3、4、5、6的钱币,我们需要找出可以...

    基于PLC的电子吊秤砝码加载技术研究.pdf

    本文研究了基于PLC(可编程逻辑控制器)的电子吊秤砝码加载技术,通过将PLC自动控制技术与模糊滑模控制算法相结合,设计了一套自动加载控制装置,有效解决了传统砝码加载技术中存在的一系列问题。 一、砝码自动加载...

    算法分析中的若干个源码

    砝码问题通常涉及到二分查找或者动态规划,常用于解决平衡问题或者找寻最优化解。在实际应用中,例如在电子秤的精度校准或物品重量估计中,我们可以使用砝码进行精准衡量。源码可能展示了如何通过递归或迭代的方式...

    母函数模板

    与砝码问题不同的是,这里的每种邮票可以使用无限多次。借助于母函数,这个问题同样可以得到解决。母函数模板在程序中的实现通常基于动态规划的方法,即通过迭代的方式逐步计算出组合的方案数。 在具体实现中,我们...

    历史上100个著名的数学问题

    2. 德·梅齐里亚克的砝码问题:这是一个关于如何用最少数量的砝码称量不同重量物体的问题,涉及二进制逻辑和平衡原理,为后来的计算机科学奠定了基础。 3. 牛顿的草地与母牛问题:这是牛顿在解决实际问题时提出的,...

    部编版第35讲 估值问题.doc

    5. **训练五**:涉及货币组合问题和砝码问题,需要理解加法和乘法的组合效果。 四、课后作业: 1. **题目1**:比较两个除法表达式的大小,需要理解除法和乘法的关系。 2. **题目2**:考察乘法的连续性,通过比较...

    江苏省丹阳市第三中学八年级物理下册《6.2用天平测物体的质量》学案(无答案) 苏科版

    10. 砝码问题的解决:砝码生锈会导致测量结果偏大,缺损则导致测量结果偏小。在实际操作中,应确保砝码完好无损以保证测量的准确性。 综上,本学案主要涉及了质量的基本概念、天平的使用方法、质量的特性以及如何...

    五年级数学上册练习题及答案【苏教版】37精选.doc

    2. **砝码问题**: 第二题是关于砝码的组合问题,需要学生理解不同砝码的组合可以表示的重量。1克、2克、4克的砝码可以单独使用,也可以两两或三个一起使用。要找出所有可能的重量组合,需要考虑每个砝码的所有可能...

    面试智力题 (附答案面试智力题 (附答案))

    11. 逻辑推理:砝码问题 这个问题需要你思考如何用 7 克、2 克砝码将 140 克的盐分成 50、90 克各一份。答案是:先用 7 克砝码称出 50 克,然后用 2 克砝码称出 40 克,剩下的 10 克可以用 7 克砝码称出。 12. ...

Global site tag (gtag.js) - Google Analytics