转:可称1~40磅的4块砝码

2024-03-23 16:48
文章标签 40 可称 砝码

本文主要是介绍转:可称1~40磅的4块砝码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

法国数学家梅齐亚克在他著名的《数字组合游戏》(1962)中提出了一个问题:一位商人有一个重40磅的砝码,一天不小心将砝码摔成了四块。后来商人称得每块的重量都是整磅数,而且发现这四块碎片可以在天平上称1至40磅之间的任意重量。请问这四块碎片各重多少?
*问题分析与算法设计
        题目中给出的条件是“在天平上”,这意味着:同一砝码既可以放在天平的左侧,也可以放在天平的右侧。若规定重物只能放在天平的左侧,则当天平平衡时有:
重物重量+左侧砝码重量总和=右侧砝码重量总和
由此可得:
                 重物重量=右侧砝码重量总和-左侧砝码重量总和
    编程时只要根据以上公式,使“右侧砝码重量总和-左侧砝码重量总和”可以表示1到40之间的全部重量即可。编程中要注意的是:怎样采用一种简单的方法来表示一个砝码是在天平的左侧还是在天平的右侧,或是根本没有使用。
以下程序采用1、 -1和0分别表示上述三种情况,请注意理解。


*程序与程序注释
#include <stdio.h>
#include <math.h>
void main()
{
  int weight1,weight2,weight3,weight4,d1,d2,d3,d4,x,flag; /*flag:满足题意的标记*/
  printf("The weight is broke up as following 4 pieces:");
  for(weight1=1;weight1<=40;weight1++) /*将40分解成4份*/
  for(weight2=weight1+1;weight2<=40-weight1;weight2++)
  for(weight3=weight2+1;weight3<=40-weight1-weight2;weight3++)
      if((weight4=40-weight1-weight2-weight3)>=weight3)
      {
          for(flag=1,x=1;x<41&&flag;x++) /*判断可否称出1~40之间的全部重量*/
          for(flag=0,d1=1;d1>-2;d1--) /*将重物放在天平的左边*/
          for(d2=1;d2>-2&&!flag;d2--) /*1:砝码在天平右边*/
          for(d3=1;d3>-2&&!flag;d3--) /*0:不用该砝码*/
          for(d4=1;d4>-2&&!flag;d4--) /*-1:砝码在天平的左边*/
              if(x==weight1*d1+weight2*d2+weight3*d3+weight4*d4)
                  flag=1;
          if(flag) printf("%d %d %d %d/n",weight1,weight2,weight3,weight4);
          flag=0;
      }
}

*运行结果
The weight is broke up as following 4 pieces: 1 3 9 27

这篇关于转:可称1~40磅的4块砝码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838953

相关文章

12个小球 梅氏砝码问题

1. 12个小球,其中有一个是坏球。有一架天平。需要你用最少的称次数来确定哪个小球是坏的并且它到底是轻还是重。 来源:http://blog.csdn.net/pongba/article/details/2544933 这个问题是一道流传已久的智力题。网络上也有很多讲解,还有泛化到N个球的情况下的严格证明。也有零星的一些地方提到从信息论的角度来看待最优解法。本来我一直认

科研小白成长记40——第三个五年计划

小gap期间,拼命玩和拼命休息的同时,仔细思考了下我期望的五年之后的样子,gap结束,算是目标愈发清晰起来。曾经,读博的目标是成为一名independent researcher,并且具备发至少一篇顶会的能力。而现在,希望五年后的自己,成为一名good independent researcher。当然,这里的good,根据现阶段的科研榜样,已经有了具体的metrics。 首先是随时在线的深度理解

javaweb-day02-2(00:40:06 XML 解析 - Dom4j解析开发包)

导入dom4j开发包:dom4j-1.6.1.jar   在工程下建一个文件夹lib,将dom4j-1.6.1.jar拷到里边。右键add to build path。  dom4j-1.6.1\lib文件夹下还有一些jar包,是开发过程中dom4j所需要依赖的jar包,如开发过程中报错,则需导入。   用dom4j怎么做呢? 只要是开源jar包提供给你的时候,它会在开源包里面提供

windows下nginx+php配置(win2008+nginx1.7.12+php5.4.40)

下载php5.4.40 下载的时候注意是nts版本 地址:http://windows.php.net/downloads/releases/php-5.4.40-nts-Win32-VC9-x86.zip 下载nginx1.7.12  地址:http://nginx.org/download/nginx-1.7.12.zip 下载RunHiddenConsole.zip 作用是运行时隐

数据库系统 第40节 数据库安全策略

数据库安全策略是确保数据库系统安全、防止数据泄露和未授权访问的关键措施。以下是一些常见的数据库安全策略,以及它们在实际应用中的一些示例。 1. 访问控制 访问控制是数据库安全的基础,它确保只有授权用户才能访问数据库资源。这通常通过以下方式实现: 用户名/密码:用户必须提供有效的用户名和密码才能登录数据库。角色和权限:用户被分配到特定的角色,每个角色都有一组权限,这些权限定义了用户可以执行的操

全网第一 | Flink学习面试灵魂40问答案,文末有福利!

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! 来源:王知无 作者:王知无 By 暴走大数据 场景描述:这是一份Flink学习面试指北。看看你搞清楚自己的定位没有? 关键词:Flink 学

全网第一份 | Flink学习面试灵魂40问,看看你能答上来几个?

《2021年最新版大数据面试题全面开启更新》 答案将在下期给出。   概念和基础篇   简单介绍一下Flink Flink相比传统的Spark Streaming有什么区别?和Spark中的structured streaming 相比呢?Flink相比ss和storm有什么优势? Flink的组件栈是怎么样的? Flink的基础编程模型了解吗?

代码随想录刷题day23丨39. 组合总和,40.组合总和II, 131.分割回文串

代码随想录刷题day23丨39. 组合总和,40.组合总和II, 131.分割回文串 1.题目 1.1组合总和 题目链接:39. 组合总和 - 力扣(LeetCode) 视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)| 回溯法精讲!_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0039.%E7%

LeetCode - 40. Combination Sum II

40. Combination Sum II  Problem's Link  ---------------------------------------------------------------------------- Mean:  给你一个待选集合s和一个数n,选出所有相加之和为n的组合.(每个元素只能选一次) analyse: 递归求解. 在递归进入

LeetCode 40 Combination Sum II

题意: 集合中的每个数字只能使用一次,求出所有数字和为target的方案。 思路: 如果把集合中的数字计数,问题会变得和 http://blog.csdn.net/houserabbit/article/details/72677176 几乎一致。 我的方法思路与计数思路几乎一致,只不过我没有合并数字,而是枚举每种数字个数的时候只取排在后面的数字,这样就保证了方案不重复。 代