【代码超详解】UVA 839 Not so Mobile

本文详细解析了UVA 839 Not so Mobile的题目,介绍了天平平衡的数学条件,并给出了算法分析和优化后的代码。通过递归调用函数IsEquil判断天平及子天平的平衡状态,当子天平的重量为0时,继续输入下一层的重量信息,最终达到判断整个天平系统是否平衡的目的。AC代码运行效率约为20ms。
摘要由CSDN通过智能技术生成

紫书 第六章 例题 6-9
一、题目描述。
已知天平的平衡条件是:左侧重量 × 左侧力臂 = 右侧重量 × 右侧力臂,即

先输入一个数代表测试组数,一个组有若干行,每行有四个整数,分别是上式的 WL 、DL 、WR 、DR 。如果 WL = 0 ,代表该天平左侧连接着一个子天平,天平左侧的重量为子天平的重量(仅计左右两侧物体的重量)下面一行需要再输入四个数,直到 WL 、 WR ≠ 0 。对 WR 同理 。
如果天平及其子天平都平衡,输出 YES ,否则输出 NO 。每两组测试之间要空一行。

二、算法分析与代码编写指导
本算法与紫书上的算法相同,只是优化了代码。
先写主程序,保留判断是否平衡的函数 IsEquil ,主程序的大致框架是:调用函数判断平衡输出 YES ,否则输出 NO 。
然后写 IsEquil 函数。传入参数是子天平的总重 W 。在主程序中调用时,该参数没有对应的物理意义。只有当 WL 或 WR = 0 时,递归调用该函数,才会将 W 修改为子天平的重量。调用函数时,新建 4 个变量 w1, d1, w2, d2 ,以及两个 bool 值记录左右子天平是否平衡。当 w1 或 w2 = 0 时,才递归调用该函数,传入参数分别写 w1 和 w2 ,这样在返回到本层函数时,本层函数中相应的左边重量或右边重量的值就已经被修改,程序也会根据子天平的重量来判断是否平衡。

三、AC 代码 (紫书原代码约 60 或 70 或 80 ms ,本代码约 20 ms)

#include<cstdio>
#pragma warning(disable:4996)
unsigned int T, w
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值