用java代码实现,使用5升和6升的水杯装出3升的水
这道题是在多看阅读的码农最新一期中看到的,没有使用递归等算法,也不知道怎么使用嵌套函数,使用while循环实现,将问题抽象出来就可以慢慢解决了。
package cn.ahern88.algorithm;/*** 问题描述:* 有一个大的河塘,里面有无限的水源,你只有一个5升和6升的水杯,请使用一种方式组合出3升的水。* @author ahern88* @date 2014-07-29*/
public class FillWater {/*** 问题抽象: * 使用x升和y升的水杯组合出z升的水。(x、y、z都为正整数)* 如果案例有解,那么应该有 ax + by = z (a,b为整数)的解。* 想想,如果以上等式无解,那么是组合不出z升水的,因为 组合 的方式是倒满小的水杯,* 小的水杯再全部倒进大的水杯,再倒满小水杯这样直到大水杯满了,将大水杯倒掉,然后将* 小水杯的水都倒进大水杯,然后再装满小水杯,小水杯再装满大水杯,这一系列反复的过程* 都可以看到,到给小水杯的水是整数倍,而从大水杯倒出去的水也是整数倍,所以以上方程* 必须要有整数解。*/public static void main(String[] args) {startFillWater(5, 6, 3);}/*** 开始装水* @param x * 小水杯容量* @param y* 大水杯容量* @param z* 要得到的容量*/public static void startFillWater(int x, int y, int z) {if (x + y < z || z < 0) {System.out.println("此题无解....");return;}if ( x > y) {int _t = x;x = y;y = _t;}// 定义大小水杯中已装的水量System.out.println("开始装水......");int a = 0, b = 0;if (y - x == z) {// 先倒入大水杯System.out.println("大水杯倒满" + x + "升水!");b = y;// 再用大水杯将小水杯倒满,大水杯余下的就是zSystem.out.println("用大水杯的水倒满小水杯!");b = y - a;System.out.println("OK!现在大杯中有 " + z + " 升水");return;}// 先将小水杯装满System.out.println("小水杯倒满" + x + "升水!");a = x;// 将小水杯水倒入大水杯System.out.println("将小水杯倒" + x + "升水到大水杯!");b = a;a = 0;System.out.println("现在水量:" + "小(" + a + "), 大(" + b + ")");int i = 0;while (a != z) {if(a != 0) {System.out.println("将小水杯倒" + a + "升水到大水杯!");b = a;a = 0;}System.out.println("小水杯倒满" + x + "升水!");a = x;System.out.println("将小水杯的水慢慢倒入到大水杯!");if(a + b > y) {int temp = y - b;System.out.println("大水杯满了,清空它");b = 0;a = a - temp;} else {b = b + a;a = 0;}System.out.println("现在水量:" + "小(" + a + "), 大(" + b + ")");if(i++ >= 1000) {System.out.println("已经尝试了1000次,此题可能无解!");return;}}System.out.println("OK!现在小杯中有 " + z + " 升水");}}
用java代码实现,使用5升和6升的水杯装出3升的水相关推荐
- java 判断手机访问_下面java代码判断是手机访问还是PC访问什么地方出错了,手机跳转不到制定页面,等待解答...
最近在做一个项目,要在判断用户是否是通过手机访问网站的,如果是手机访问网站跳到一个登录页面,如果是用户用电脑访问网站跳到另外一个登录页面.我写了以下代码,但是用手机访问网站的时候,跳转不到制定页面,请 ...
- 编写高性能Java代码的最佳实践
编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...
- cmd怎么实现Java你好_java环境配置以及如何在cmd窗口运行java代码
对于初学java的人来说,电脑的环境配置也许会让你头疼,但只要你认真一些学习,相信对你来说都是OK的啦~ 首先回到桌面,选择我的电脑,单击右键属性,进入高级系统设置,点击环境变量设置.用户变量选择Te ...
- Android 使用java 代码获取res 里面的value 定义的数组
现在res value 里面定义了一个array.xml 内容如下 <?xml version="1.0" encoding="utf-8"?> & ...
- 使用JAVA代码实现Android布局(一)RelativeLayout
通常我们使用XML来书写Android的图形界面,XML虽然编写方便,但是在某些情况下不如JAVA代码灵活,所以在某些环境下还是必须使用JAVA代码来编写界面.我们以下XML代码为例,编写相应的JAV ...
- 转--Android如何在java代码中设置margin
======== 3 在Java代码里设置button的margin(外边距)? 1.获取按钮的LayoutParams LinearLayout.LayoutParams layoutParams ...
- java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...
标签: 今天通过网络资源研究了一下如何使用Java代码获取文件.文件流或字符串的编码方式,现将代码与大家分享: package com.ghj.packageoftool; import info.m ...
- matlab中调用java代码_Matlab中调用第三方Java代码
在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...
- 5个常用Java代码混淆器 助你保护你的代码
[IT168 技术文档] 从事Java编程的人都知道,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具之一就是JAD.因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以使用 ...
最新文章
- 华盛顿大学《生成模型》2020秋季课程完结,课件、讲义全部放出
- vim 初学简单设置
- 介绍linux下Source Insight强大代码编辑器sublime_text_3
- 如何减少tomcat内存使用量?
- 多样性算法在58部落的实践和思考
- vmware安装centos6-步骤小结
- java平方和和立方和3_平方和与立方和
- 【常用软件下载地址】java开发官方资源下载网址大全(持续更新)
- flash编译器错误查询表
- 网络安全认证与加密协议算法整合
- 洛谷 P2689 东南西北
- 利用ESP8266模块制作便携WiFi杀手进行deauth攻击
- 按“window+E”键出现【找不到应用程序】或【explore.exe找不到】的解决方法
- 回顾敏捷实践踩过的坑:如果重新做,我会这样做(一)
- 3、Qt5 主窗口点击按钮 弹出另一个自定义窗口
- sql 盲注 (web渗透)
- TMC2208-LA步进电机驱动芯片
- 用HTML+bootstrap制作个人简历
- 将Windows7屏幕外的窗口拖回
- 使用GGE开发Google小工具(Google Gadget)
热门文章
- ubuntu 18.04 新配主机 无wifi适配器 找不到wifi问题解决
- dtree.js菜单列表加密,实现Code
- 如何用AVS Video Editor这款视频编辑软件消除音频噪音?
- EXCEL VBA学习例子之【升降序】
- 在职计算机技术考研英语自我介绍,2019考研复试英语自我介绍范文--在职考研
- 57步进电机了解与实践笔记
- 淘宝天猫商家运营,淘宝验号查号是什么意思,有什么作用
- 数字信号处理实验一(离散时间信号的MATLAB实现)
- php emoji 保存 显示,PHP开发中涉及到emoji表情的几种处理方法
- Java之工厂设计模式