喝汽水问题的两种算法实现

我顺便记录了一下循环执行的次数。

可能明显看到,第二种办法在算法上的优势。

所以,最重要的还是人脑对在计算机外算法的改进,而不只是依据最快的硬件,搞最坏的时间空间复杂度。

~~~~~~~~~~~~~~~~~~~

喝了三个空瓶就兑换一次的策略。

 1 public class hello {
 2
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) {
 7         int num =  1000;
 8         int emptynum = 0;
 9         int drinknum = 0;
10         int cpunum = 0;
11         while( num > 0){
12             System.out.println("===============");
13             cpunum++;
14             System.out.println("cpunum = " + cpunum);
15             num--;
16             drinknum++;
17             emptynum++;
18             if (emptynum == 3)
19             {
20                 cpunum++;
21                 num++;
22                 emptynum = 0;
23             }
24             System.out.println("drinknum = " + drinknum);
25             System.out.println("num = " + num);
26             System.out.println("emptynum = " + emptynum);
27
28         }
29
30     }
31
32 }

第二种,每次全喝完,集中兑换空瓶策略。

 1 public class hello {
 2
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) {
 7         int num =  1000;
 8         int emptynum = 0;
 9         int drinknum = 0;
10         int cpunum = 0;
11         while( num > 0){
12             System.out.println("===============");
13             cpunum++;
14             System.out.println("cpunum = " + cpunum);
15             drinknum += num;
16             System.out.println("drinknum = " + drinknum);
17             emptynum += num;
18             num = emptynum / 3;
19             System.out.println("num = " + num);
20             emptynum -= (num*3);
21             System.out.println("emptynum = " + emptynum);
22
23         }
24
25
26
27     }
28
29 }

输出:

===============
cpunum = 1
drinknum = 1000
num = 333
emptynum = 1
===============
cpunum = 2
drinknum = 1333
num = 111
emptynum = 1
===============
cpunum = 3
drinknum = 1444
num = 37
emptynum = 1
===============
cpunum = 4
drinknum = 1481
num = 12
emptynum = 2
===============
cpunum = 5
drinknum = 1493
num = 4
emptynum = 2
===============
cpunum = 6
drinknum = 1497
num = 2
emptynum = 0
===============
cpunum = 7
drinknum = 1499
num = 0
emptynum = 2

时间: 2024-09-22 18:52:33

喝汽水问题的两种算法实现的相关文章

java操练之求两数最大公约数的两种算法思路

代码: 1 public class Hello { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 int a = 1112; 8 int b = 208; 9 int e = 546800; 10 int f = 256400; 11 int c = 1; 12 int min = (a < b ? a : b); 13 int min2 = (e < f ? e : f); 14 for(

两种JAVA实现短网址服务算法_java

短网址(Short URL) ,顾名思义就是看起来很短的网址.自从twitter推出短网址服务以后,各大互联网公司都推出了自己的短网址服务.短网址最大的优点就是短,字符少,便于发布.传播.复制和存储. 通过网上的搜索,感觉流传了2种短网址算法,一种是基于MD5码的,一种是基于自增序列的. 1.基于MD5码 : 这种算法计算的短网址长度一般是5位或者6位,计算过程中可能出现碰撞(概率很小),可表达的url数量为62 的5次方或6次方.感觉google(http://goo.gl),微博用的是类似这

详解js实现线段交点的三种算法_javascript技巧

本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊 引用 已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交) 算法一: 求两条线段所在直线的交点, 再判断交点是否在两条线段上. 求直线交点时 我们可通过直线的一般方程 ax+by+c=0 求得(方程中的abc为系数,不是前面提到的端点,另外也可用点斜式方程和斜截式方程,此处暂且不论). 然后根据交点的与线段端点的位置关系来判断交点是否在线段上. 公式如下图:

主宰这个世界的10种算法,你了解其中的几种?

class="post_content" itemprop="articleBody"> Reddit 有篇帖子介绍了算法对我们现在生活的重要性,以及哪些算法对现代文明所做贡献最大.如果对算法有所了解,读这篇文章时你可能会问"作者知道算法为何物吗?",或是" Facebook 的'信息流'(News Feed)算是一种算法吗?",如果"信息流"是算法,那就可以把所有事物都归结为一种算法.才疏学浅,结合

PHP两种快速排序算法实例

 这篇文章主要介绍了PHP两种快速排序算法实例,本文直接给出实现代码,分别使用递归法.迭代法实现,需要的朋友可以参考下     虽然在PHP这样的web应用开发中,我们不是太强调排序的重要性,因为PHP自身已经带了例如sort()等这样强大的排序函数,但是在一些重要的场合,例如某些高并发的场合,我想排序算法的影响已经不能忽略.所以在此介绍递归排序和迭代排序. 递归法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 /** *

算法-选择排序这两种有什么不同,注意粗体部分

问题描述 选择排序这两种有什么不同,注意粗体部分 public static void sort(Comparable[] a){ // 将a[] 按升序排列 int N = a. length; // 数组长度 for (i nt i = 0; i < N; i ++) { // 将a[i ] 和a[i +1. . N] 中最小的元素交换 int min = i ; // 最小元素的索引 for (int j = i +1; j < N; j ++) if (l ess(a[j ] a[mi

两种曲线点抽稀算法-Python实现 附代码

何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便.多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不光滑或不符合标准.因此要通过某种规则,在保证矢量曲线形状不变的情况下, 最大限度地减少数据点个数,这个过程称为抽稀. 通俗的讲就是对曲线进行采样简化,即在曲线上取有限个点,将其变为折线,并且能够在一定程度保持原有形状.比较常用的两种抽稀算法是:道格拉斯-普克(Douglas-Peuker)算法和垂距限值法. 道格拉斯-普克(Douglas-Pe

为提升在线语音识别效率,他创造了两种升级版算法模型

近日,阿里算法专家坤承携<使用改进版本的LATENCY-CONTROLLED BLSTM 算法模型提升在线语音识别效率>(IMPROVING LATENCY-CONTROLLED BLSTM ACOUSTIC MODELS FOR ONLINE SPEECH RECOGNITION)参与ICASSP2017大会. 论文作者坤承与参会者交流 论文研究的出发点在于,为了能够取得更好的语音识别准确率,在声学模型建模中使用了Latency-controlled BLSTM 模型. 详见95188:BL

【测试】两种数据库,四种分页算法的效率比较

  分页算法本身没有什么快慢之分,对反应速度起到决定作用的是--能否有效地利用索引!   算法 评价 缺点 适用的数据库 max 效率最高的 只能有一个排序字段 Excel.Access.SQL Server 2000(2005) 颠倒Top 适用范围最广的 最后一页多数据 Excel.Access.SQL Server 2000(2005) 表变量 最大失所望的 太多了 SQL Server 2000(2005) Row_Number 只适合SQL Server2005 只能用在一种数据库 S