uva571 - Jugs(水壶)

2023-11-20 19:32
文章标签 jugs uva571 水壶

本文主要是介绍uva571 - Jugs(水壶),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

贴出以为大神的分析。。。。简明易懂

本题只要求给出一个解,不要求最优。所给的两个罐子容量一定互质,因此必然可以倒出从0到大罐容量间的任何整数值。原理是若A,B互质,则最小公倍数为A×B,即不存在一个1 < n < B,使得nA能被B整除。令r = nA mod B(mod为取模操作),那么当n从0到B-1变化时,r可以取到0到B-1之间的任何值。这个是很容易证明的,但我的证明过程非常不专业,还请各位数学老师给予指教!

现在的问题就是用AB两个罐子相互倒水来模拟这个数学过程。设小罐容量为A,大罐容量为B。每次将A装满后倒入B中。若第m次后B已装满,A剩下的水量为r1,则有:

  • r1 = mA mod B

然后将B倒空,把A中剩余的r1装入B。又经过n次从把A装满倒入B的操作后B被装满,此时A剩下的水量为r2,则有:

  • r2 = (r1 + nA) mod B
  • = (mA mod B + nA) mod B
  • = (m+n)A mod B

由此可知,倒的方法就是每次将A中的水倒进B,但每次在做这一步之间要先检查A、B中的水量,如果A为空,就将A装满;如果B已倒满,就将B清空。最后一定可以在某个时候在B罐中得到需要的水量。

代码如下:
#include <cstdio>
int ca, cb, c, a, b;
int main ()
{while(~scanf("%d%d%d",&ca,&cb,&c)){a = b = 0;while(b!=c){if(a==0)//a为空,则加满{a = ca;puts("fill A");}if(b==cb)//b若满,则清空{b = 0;puts("empty B");}puts("pour A B");//a倒向bb+=a; a = 0;if(b>cb)//若移除,则收回{a += b-cb;b = cb;}}puts("success");}return 0;
}


这篇关于uva571 - Jugs(水壶)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JD 1147:Jugs(一种用最少步骤求解的方法)

OJ题目:click here~~ 题目分析:九度上这道没有要求最少步数,只要得到最后结果即可AC , bfs , dfs都行。最少步骤的方法肯定也能AC啦,分析如下。 输入的三个数:a,b,n;> 由题不定方程ax+by=n必定有解> 如果b=n,则fill B即可,否则用试探法求出这样的两组解(a1,b1)及(a2,b2),其中a1 >0,b1<0;a1是满足方程的最小正整数;a2

字节跳动面试题 —— 水壶问题

点击上方“朱小厮的博客”,选择“设为星标” 回复”1024“获取独家整理的学习资料 原题:给你一个装满水的 8 升满壶和两个分别是 5 升、3 升的空壶,请想个优雅的办法,使得其中一个水壶恰好装 4 升水,每一步的操作只能是倒空或倒满。 理解了这个题目的意思之后,我们的第一个方法肯定就是使用强大的脑力来进行暴力破解法,瓶子里的水在我们的脑子里颠三倒四,但是脑子有可能没那么清晰,想了几步之

C++ | Leetcode C++题解之第365题水壶问题

题目: 题解: class Solution {public:bool canMeasureWater(int x, int y, int z) {if (x + y < z) {return false;}if (x == 0 || y == 0) {return z == 0 || x + y == z;}return z % gcd(x, y) == 0;}};

Java | Leetcode Java题解之第365题水壶问题

题目: 题解: class Solution {public boolean canMeasureWater(int x, int y, int z) {if (x + y < z) {return false;}if (x == 0 || y == 0) {return z == 0 || x + y == z;}return z % gcd(x, y) == 0;}public int

uva 571 Jugs

原题: In the movie “Die Hard 3”, Bruce Willis and Samuel L. Jackson were confronted with the following puzzle. They were given a 3-gallon jug and a 5-gallon jug and were asked to fill the 5-gallon jug

请马上停用这种水壶,长期喝它烧的水,后果很严重!很多人家里几乎都用!

如果你家里用这种不锈钢水壶烧水,请马上停止使用!因为你的水壶可能正在释出重金属! class="video_iframe" src="http://v.qq.com/iframe/player.html?vid=c0189yux4yw&auto=0" width="300" height="150" frameborder="0" scrolling="no" allowfull

LeetCode 365. 水壶问题(数论)

Description 有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。 你允许: 装满任意一个水壶 清空任意一个水壶 从一个水壶向另外一个水壶倒水,直到装满或者倒空 示例 1: (From the famous "Die Hard" example)输入:

水壶问题与裴蜀定理

水壶问题 题目有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。 你允许: 1-装满任意一个水壶 2-清空任意一个水壶 3-从一个水壶向另外一个水壶倒水,直到装满或者倒空 因此可以说明,每次操作会使得最终的结果变化**(±)x或者(±)y**,都是整数,变化(x-y

智能烧水壶(WIFI版)03——温度采集和过温报警功能实现篇

前言 前面我们已经创建好产品并建立起app端和设备端的连接,接下来我们将实现智能烧水壶的温度采集和过温报警功能。 一、智能烧水壶的功能设定 智能烧水壶的功能设定如下表,我们将整个智能烧水壶拆分成几个模块,逐个实现功能;本文实现烧水壶的温度采集和声音报警功能,温度采集主要用于水温的温控调节,当温度高于105摄氏度时说明水壶已经处于干烧状态,此时蜂鸣器进行声音报警。 功能说明煮沸触摸按键1,

​LeetCode解法汇总365. 水壶问题

目录链接: 力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可