`
tianshi_kco
  • 浏览: 21536 次
  • 性别: 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,20g的砝码各若干枚(其总重),要求: 输入:a1,a2,a3,a4,a5,a6(表示1g的砝码有a1个,2g的砝码有a2个. ……20g的砝码有a6个) 输出:Total=n(n表示这些砝码能称出的不同重量的个数,...

    天平称物问题

    天平称物问题。用四个砝码实现1-40克任意物体的称量。求出砝码的质量。

    用信息论方法分析17枚假币问题 c++实现

    17枚同质硬币中有1枚假币,仅知假币与真币重量不同。可用工具是1台没有砝码的天平,设计找出假币的方案并进行讨论。

    C语言中常见问题的算法与程序总结

    五十一、砝码 33 五十二、杨辉三角 34 五十三、图论的一些定理: 37 五十四、二部图 38 五十五、排列组合问题 39 五十六、计数问题 39 五十七、微积分公式 41 五十八、三角函数公式 43 五十九、空间解析几何和向量...

    fama.rar_fama

    砝码称重问题! 用1,2,5,10,20,50的砝码称出1到88的物重

    西门子称重模块技术问题5.zip

    西门子称重模块技术问题5zip,西门子称重模块技术问题5:如何通过SIWATOOL MS软件标定 SIWAREX MS称重模块 ? 如何通过SIWATOOL MS软件标定 SIWAREX MS称重模块? 解答: 所需硬件和软件如下: SIWAREX MS 模块, S7-200 ...

    力标准机加载过程砝码倒换控制方法 (2006年)

    从理论上分析了静重式力标准机...据此建立了控制模型,研究了其中的控制问题,并进行了倒码实验。结果表明,对祛码倒换的力学原理的理论分析和基于此的控制模型是正确、有效的,利用该模型控制倒码造成的力值波动不大于2%。

    西门子如何使用SIWATOOL CS校准SIWAREX CS.zip

     问题: 如何使用 SIWATOOL CS 校准 SIWAREX CS ? 解答: 构成一个带称的 ET200S 站需要下列硬件和软件:SIWAREX CS 模块, 30mm 端子模块, IM151 Profibus 或 Profinet, 电源模块,电源模块的端子块, SIWATOOL CS...

    微克质量标准磁性测量中的关键问题 (2014年)

    砝码的磁性对于砝码质量值测量的影响越来越受到人们的重视.比较了3种磁性测量的方法及磁化率和磁场强度不确定度分量,指出其与微克质量标准磁性测量中的不同,进而提出一个测量弱磁性微克质量标准磁化率的方法....

    西门子如何使用SIWATOOL U来校准SIWAREX U?.zip

    24V 电源,S7-300 CPU 或 ET200M 站, CPU 用内存卡,SIWAREX U, SIWAREX U 前连接器, SIWATOOL U 软件,RS232 电缆, 带 Windows XP 或更高系统的电脑和一个大于所有称重元件标称值总和 5% 的砝码。 .

    2023最新美赛备赛的一些资料汇总

    突出的解决问题能力 强大的编程技能能力 优秀的团队合作能力与领导力 参加美赛的话既可以熟练的外文文献阅读能力、以及优秀的英文写作能力。同时还可以对评奖评优,保研加分增加砝码。 2023美赛在即,为帮助大家...

    数据结构及算法C语言实现代码集[推荐下载]

    四分砝码.c 圆周率 多位阶乘2.c 多位阶乘.c 大加数.c 大小倍约.c 大整数.c 完数.c 小孩分糖果.c 小明买书 平方根.c 数学算法 桃子猴问题 灯塔问题.c 百鸡百钱.c 简单计算器.c 苹果纠纷 递推.c 逻辑移动.c 阶乘递归.c...

    基于曲线拟合的智能称重传感器自校正

    针对智能传感器自校正的问题,构建了基于IEEE1451智能传感器校正引擎的校正模型,优化了校正公式,阐述了曲线拟合法的基本原理。然后以应变式称重传感器为实例,描述了其工作机理,并分析误差产生的原因,以曲线拟...

    动态规划经典题打包下载1

    解压后包括: mod 4 最优路径问题.doc 城市交通.doc 乘积最大.doc 砝码称重.doc

Global site tag (gtag.js) - Google Analytics