`

天平机器人

阅读更多
13只大小相同的球,其中一只 球与其他的12只球质量不一样,可能比其他球重,也可能比其他球轻。现有一只没有砝码的天平,天平只可以使用3次,如何利用天平找出这只质量与其他球不同的球?


下面是我写的机器人,可以在N个球中寻找这个异重球,是用javascript实现的。


http://www.lightmtv.org/minibot/minibot.html

此题的正解:


第一步:天平左侧: 1, 2, 3, 4 ,天平右侧:
5, 6, 7, 8


情况A:平衡,则说明异重球在,9,10,11,12,13中


第A2步:天平左侧: 9, 10 ,天平右侧: 1, 11


情况AA:平衡,则说明异重球在12,13中


第AA3步:天平左侧: 12,天平右侧: 1


情况AAA:平衡,则说明异重球为13号球。


情况AAB:不平衡,则说明异重球为12号球,且可知此球相对是重是轻。


情况AB:左重右轻,则说明可能是9,10中一球重,或11轻。


第AB3步:天平左侧: 9,天平右侧: 10


情况ABA:平衡,则说明11号球轻。


情况ABB:左重右轻,则9号球为重球


情况ABC:右重左轻,则10号球为重球、


情况AC:右重左轻,与AB同


情况B:左重右轻,则说明可能是1,2,3,4中一球重,或5,6,7,8中一球轻


天平右侧:
2, 7, 8

情况BA:平衡,则说明可能是3,4中一球重

重侧为异重球,且此球为重球。平衡则无解。

情况BC:右重左轻,与情况BB同



解题过程:当我想要编写算法在N个球中寻找异重球时,开始是茫然,不知道如何下手,但当我想到的一些状态后,就有了思路,这些状态是,天平的左倾,右倾,平衡,球是可能重,可能轻,未知,标准重量,这些状态都需要被表示,被记录。每个球的初始状态都是未知,在解题的过程中都会重新计算他的状态。因此需要一个函数,根据天平的状态来计算球的可能状态。然后需要思考的是最重要的问题,写一个函数,根据球的状态来决定将哪些球放在左边,哪些球放在右边,简单的说是将目标球分成3份。


分享到:
评论
4 楼 jasongreen 2007-07-15  
还有谁做过可以互动的吗? 由玩家来告知天平状态
3 楼 jasongreen 2007-06-13  
我的也是针对N个球的,不过对13球问题可以很好给出解答,13球是个特殊个案
2 楼 Lich_Ray 2007-06-08  
奇怪,怎么代码多了一遍?!
1 楼 Lich_Ray 2007-06-08  
不好意思。我也做了这题。不过是用此手段面向任意数量的球,用Python写的。
在《程序员》上看到题目的。

《程序员》上使用了将球分为0~n-1,n~2n-1,2n~N-1(n=(N%3)?(N/3+1):(N/3))两两递归比较的方法。但由于在整个比较过程中,这个球到底偏轻还是偏重一直没有确定而进行了多次无效的比较,一个字:慢。

我的主要思想与《程序员》中的类似,不过对球的列表的分片有所不同:
parts = [balls[:n], balls[n:2*n], balls[2*n:3*n]]
保证3片球数相同。确定是那一片出了问题后返回它时,最后一片由于可能不是balls[2*n:3*n](len(balls)%3!=0),所以返回balls[2*n:]。

球包括号码和质量两个属性,类定义如下:
class Ball:
    def __init__ (self, weight):
self.weight = weight
self.number = 0[/python]
(注:number的默认值0是无效的,号码从1开始)
sum()用于给质量求和:
def sum (balls):
    tmp = 0
    for ball in balls:
tmp += ball.weight
    return tmp[/python]
天平函数,返回比较结果——HEAVY = 1,LIGHT = -1,EQUAL = 0:
def metage (leftBalls, rightBalls):
    left = sum(leftBalls)
    right = sum(rightBalls)
    if left > right: return HEAVY
    if left < right: return LIGHT
    return EQUAL


用全局变量QUESTION保存问题球是轻是重,这由预测量函数pre()给出,它工作后还返回有问题的分片。这样test()函数在工作时可以少一半比较次数。

test函数递归调用自身,可以采用折半比较的方式。但那样会提供算法的时间复杂度。假设n个质量数据求和要进行n次运算,折3片比较共需p=2*(x/3+x/3^2+...x/3^(N-1))次运算,化简得p=x-x/3^n,即求和运算次数不会大于球总个数。而折半比较则需(2^(N+1)-1)x(不准)次运算,明显多于使用分3片比较。

具体比较的条件详见代码,自行阅读。

最后解释一下数据文件的读入情况。数据文件是普通文本文件,每行一个数字,其中一个与其它不同。open(sys.argv[1]).readlines()返回一个由每行的字符串构成的列表,weight_list = map(string.atoi, open(sys.argv[1]).readlines())对这个列表中的每一项进行转数字操作并存入weight_list。ball_list = map(Ball, weight_list)把表中每一项创建Ball对象,最后test(pre(ball_list)计算返回球的编号。

#metage.py
import sys
import string

#作指示符的全局变量
HEAVY = 1
LIGHT = -1
EQUAL = 0
QUESTION = 0
ANSWER = ""

class Ball:
    def __init__ (self, weight):
	self.weight = weight
	self.number = 0

#求球重和的函数
def sum (balls):
    tmp = 0
    for ball in balls:
	tmp += ball.weight
    return tmp

#称量函数
def metage (leftBalls, rightBalls):
    left = sum(leftBalls)
    right = sum(rightBalls)
    if left > right: return HEAVY
    if left < right: return LIGHT
    return EQUAL

#多了一次称量,同时判断球是轻还是重
def pre (balls):
    global QUESTION
    n = len(balls) / 3
    parts = [balls[:n], balls[n:2*n], balls[2*n:3*n]]
    statu = metage(parts[0], parts[1])
    if statu == EQUAL:
	QUESTION = metage(parts[2], parts[0])
	return balls[2*n:]
    QUESTION = statu
    if metage(parts[0], parts[2]) == EQUAL:
	return parts[1]
    else:
	return parts[0]

#真正的称量过程,递归地用你所说的办法
def test (balls):
    l = len(balls)
    if l == 1:
	return balls[0].number
    n = l / 3
    if l < 3:
	n = 1
    parts = [balls[:n], balls[n:2*n], balls[2*n:3*n]]
    statu = metage(parts[0], parts[1])
    if statu == EQUAL:
	return test(balls[2*n:])
    elif statu == QUESTION:
	return test(balls[:n])
    else:
	return test(balls[n:2*n])

#读读文件
weight_list = map(string.atoi, open(sys.argv[1]).readlines())
ball_list = map(Ball, weight_list)
i = 1
#设置球号
for ball in ball_list:
    ball.number = i
    i += 1
if QUESTION == 1:
    ANSWER = "heavier"
else:
    ANSWER = "lighter"
print "The No.%d ball is %s than others." % (test(pre(ball_list)), ANSWER)

数据文件的内容类似这个:
13
14
13
13
13
13
把它的文件名作第一个参数:
python metage.py filename

相关推荐

    机器人技术等级考试模拟题B(一级)模拟题附答案

    根据给定的文件信息,我们可以总结出一系列与机器人技术和基础物理相关的知识点,这些知识点主要集中在基本的力学原理、机器人的定义及其应用场景等方面。下面将详细展开这些知识点。 ### 一、单项选择题知识点 1....

    Themis-bot:简单的不和谐机器人

    她的象征是正义的天平,用来保持平衡和务实的工具。 忒弥斯的意思是“神圣的法律”,而不是人的条例,... 入门 当前,您必须将Bot托管在始终连接到Internet的某个位置。 为了使您的机器人启动并运行,您需要一组...

    五年级科学下学期期末复习提纲2 冀教版.doc

    这篇文档主要涵盖的是小学五年级科学课程中关于简单机械、天平使用以及机器与机器人基础知识的复习提纲。以下是对这些知识点的详细说明: 1. **简单机械**:包括杠杆、滑轮、轮轴和斜面。它们是日常生活和工作中...

    人工智能一级考试练习题.pdf

    - **示例**:示教再现型机器人、具备感觉性能的机器人以及智能机器人。 8. **机器人一词的起源**: - “机器人”一词最初是由小说家提出的,后来成为了一个广为人知的概念。 - **背景**:捷克作家卡雷尔·恰佩克...

    基于ADAMS和MATLAB杠杆平衡系统PID控制仿真

    作者简介中提到的曲志明和魏世民,分别来自北京邮电大学自动化学院,其中曲志明为硕士研究生,专注于机器人机构学及测控技术,而魏世民为教授,专注于机器人机构学,两位作者具备了进行此项研究的专业背景和经验。...

    湘教版一年级科学上册第一次月考考试题【加答案】.pdf

    10. 使用简易天平时,悬挂重物的天平两端长度应保持一致,以确保平衡。 **连线题**: 这部分主要涉及动物特征的匹配,例如动物是否需要进食、是否具有情感等,是生物学基础概念的运用。 **比较人与机器人**: 1. ...

    Artificial bacterial flagella functionalized with temperature-sensitive liposomes for controlled release

    7. 实验与验证方法:研究使用了石英晶体微天平监测法(QCM-D)和荧光探针等技术对ABFs表面的脂质体涂层进行了确认。这显示了研究者在实验设计和验证方面采用了多种方法,确保了实验的可靠性和结果的准确性。 文章的...

    horofootball.thechels.uk:足球占星术,正式是一个基于PHP脚本和cron作业的Twitter机器人。 现在,由python脚本生成的GitHub Pages输出在GitHub Actions上运行

    天秤座和你的第十二宫的冥王星激发了人们思考伯恩利受伤,重度吸烟的中场的动力 天蝎座 今天的太阳水星反对派可能会迫使您利用阿斯顿维拉明星球员的能量 射手座 海王星与火星的对准使您有动力去思考莱斯特受伤的重度...

    LabManager系统说明

    实验室装置及配件部分,则包括扭矩测量搅拌器和搅拌器刀片、液相分离设备、玻璃组件、完全蒸发器、天平、恒温器、阀门和止回阀等。这些配件为实验室提供了基础的实验工具。 在过程分析与传感器方面,系统支持压力、...

    冀教五年级下册科学复习资料PPT学习教案.pptx

    杠杆如橇棍和天平,其中天平的工作原理基于杠杆平衡;轮轴如汽车方向盘,由一个圆轮和轴组成;滑轮分为定滑轮和动滑轮,用于改变力的方向和大小;斜面如引桥和盘山公路,用于减小提升物体所需的力。 2. **生物知识*...

    最新教科版一年级科学上册第一次月考考试题.pdf

    这部分主要是考察学生对工具用途的理解,例如使用放大镜观察微小物体,用天平比较物体重量,搅拌棒用于搅拌液体,卷尺测量长度。 **四、磁铁能吸引哪些物体** 磁铁能吸引铁质或含铁的物质,如曲别针、大头针和铁...

    北师大版2019-2020学年七年级上学期科学期末考试试卷A卷.pdf

    7. **机器人与生物的区别**:机器人Spyke展示了人工智能技术的应用,强调了生物与非生物的区别,比如机器人的构成单位不是细胞,但能够对外界刺激做出反应。 8. **细胞核与细胞功能**:题干提到了去除细胞核的受精...

    青岛版一年级科学上册期中考试题及答案【完美版】.pdf

    21. **人与机器人的差异**:这部分让孩子们通过比较人和机器人的行为,理解人类的情感和生理需求是机器人所不具备的。 22. **蜗牛的身体结构**:最后一部分是关于蜗牛身体结构的匹配,要求学生识别蜗牛的口、眼、...

    范例模板2018-2021年挑战杯等大学生竞赛参赛资料合集

    小贩机器人-成都越凡创新科技有限公司(附PPT+视频) 【国赛】天秤星- 跨境出口电商支付平台(附PPT+视频) 【国赛】水生动物行为驱动的水质预 警系统(附PPT) 【国赛】石墨烯基柔性锂离子电容器-柔性储能先锋...

    新人教版九年级物理上册期末考试题及答案【完整】.pdf

    9. **参考系**:机器人静止是以托盘为参考系,其他选项会使机器人看起来在移动。 10. **惯性与平衡力**:惯性是物体固有属性,不受力;平衡力是大小相等、方向相反、作用在同一直线上的两个力。 11. **增大压强**...

    (杭州)2018-2019学年第一学期七年级期末测试-科学试题卷.pdf

    14. 称量操作:第十四题描述了使用天平称量一定质量水的操作步骤,正确顺序是先调节天平平衡,然后称量空烧杯,加砝码,再加水,最后整理天平。 15. 物理实验:第十五题列出了一系列可能的实验,如测量密度、鉴别...

    2020年中考物理总复习尖子生必刷题特训07计算题20题含解析

    这里通过天平测量空瓶的质量和装满水后的总质量,可以求出水的质量,进而得到水的体积,即瓶子的容积。再用装满待测液体后的总质量减去空瓶的质量,得到液体的质量,最后利用密度公式 ρ = m/V 来求出液体的密度。 ...

    电子称RS232串口卡驱动

    三轴机械手是一种能够沿着三个独立坐标轴移动的机器人,常用于精密装配、搬运和加工等任务。在这种情况下,电子秤可能作为测量和反馈重量信息的组件,与机械手协同工作,确保精确操作。 在标签中,“电子称”强调了...

    浙江省绍兴县杨汛桥镇七年级科学10月独立作业试题 浙教版 试题.doc

    5. 第5题涉及生物与非生物的区别,机器人是非生物体。 6. 第6题探讨了温度与冷热程度的关系,0℃的水和0℃的冰温度相同,所以冷热程度一样。 7. 第7题未提供图片,通常涉及到测量工具的使用方法和读数准确性。 8....

    浙江省杭州市2018-2019学年七年级上学期期末测试科学试题.pdf

    14. 天平使用:第十四题涉及天平的使用,包括天平的校准、称量液体的正确步骤。 15. 密度测量和实验设计:第十五题检验学生对质量、密度、测量原理的理解,以及应用这些知识进行实际操作的能力。 16. 二氧化碳灭火...

Global site tag (gtag.js) - Google Analytics