黑马程序员技术交流社区

标题: 我来说说关于换可乐的问题! [打印本页]

作者: 呐拽    时间: 2015-4-10 01:29
标题: 我来说说关于换可乐的问题!
这是个很经典的问题,今天听同学说了这个问题,忍不住就研究了一下,下面的代码中的person作为参数的话就可以做成方法了,由于 是就事论事的分析,所以就没做方法大神莫怪哦,好了下面开始阅读吧。另外弱弱的说一句,结果出来的时候我发现; 一个问题,销售行业都是坑啊!其实没便宜多少啊!
  1. public class Coke {

  2.         /**
  3.          * 28个人 买可乐  三个瓶盖换一个可乐 请问需要买多少瓶
  4.          * 分析:
  5.          * 1先买一瓶 ,
  6.          * 2不够喝,所以多买一瓶试试
  7.          * 3用瓶盖去还,直到不能换为止,
  8.          * 4然后判断买的可可乐够不够,够了就不再买了否则重复2过程
  9.          * 根据分析明显是个未知次数的循环,所以选择用while循环
  10.          */
  11.         public static void main(String[] args) {
  12.                 // TODO Auto-generated method stub
  13.                 int person = 28;//喝可乐的人数
  14.                 int n = 1;//初始买一瓶可乐
  15.                 while (true) {
  16.                         n++;//买一瓶可乐
  17.                         int count = 0;
  18.                         int m = n;//m为瓶盖数
  19.                         while(m>=3){
  20.                                
  21.                                 int coun =m/3;//用瓶盖去换可可乐
  22.                                 m = coun +m%3; //之前剩余的有瓶盖的可乐加上新换来的有瓶盖的可乐
  23.                                 count = coun+count;//统 计换的可乐数
  24.                         }
  25.                         //判断是否需要再买够人喝了就不用再买了
  26.                         if (n+count>=person) {
  27.                                 break;
  28.                         }
  29.                        
  30.                 }
  31.                 System.out.println("可乐公司举办活动:三个瓶盖换一个可乐的活动");
  32.                 System.out.println(person+"个人,一人喝一瓶,需要买"+n+"瓶可乐");
  33.         }

  34. }
复制代码

作者: kayaking    时间: 2015-4-10 09:15
学习一下
作者: 百思不得解    时间: 2015-4-10 11:01
不错哟。这个思路。
作者: 13699266500    时间: 2015-4-10 11:19
参考一下
作者: Advances    时间: 2015-4-10 11:24
回头试试自己能搞出来不
作者: 为黑马而来    时间: 2015-4-10 23:04
学习学习..赞!
作者: natsu647    时间: 2015-4-10 23:14
不错,挺有意思的。
作者: sisel    时间: 2015-4-10 23:23
本帖最后由 sisel 于 2015-4-10 23:26 编辑

数学论断可知 需要瓶数不少于2n/3,故起点可以设高点减少循环次数,再深入一点 假如可以借瓶盖,那么买2瓶刚好可以喝3瓶,所以这个问题很简单 =N%3>0?N%3+2*N/3:2*N/3+1
作者: 呐拽    时间: 2015-4-11 01:17
kayaking 发表于 2015-4-10 09:15
学习一下

欢迎来访!!!!!!!!!
作者: 呐拽    时间: 2015-4-11 01:18
sisel 发表于 2015-4-10 23:23
数学论断可知 需要瓶数不少于2n/3,故起点可以设高点减少循环次数,再深入一点 假如可以借瓶盖,那么买2瓶 ...

代码很简洁 。不过我觉得这样的题,还是模拟一下实际的流程比较好
作者: 呐拽    时间: 2015-4-11 01:19
natsu647 发表于 2015-4-10 23:14
不错,挺有意思的。

早上起来发现班里好多人都在写这个!
作者: 呐拽    时间: 2015-4-11 01:20
natsu647 发表于 2015-4-10 23:14
不错,挺有意思的。

早上起来发现班里好多人都在写这个!
作者: joyjio    时间: 2015-4-11 01:30
哎,这个问题我始终弄的不是很明白!过来学习一下!
作者: 呐拽    时间: 2015-4-11 21:31
joyjio 发表于 2015-4-11 01:30
哎,这个问题我始终弄的不是很明白!过来学习一下!

没有问题 !
作者: 123.java    时间: 2015-4-13 22:33
............
作者: 进击的华仔    时间: 2015-4-13 22:34
  1. public class Cokcole {
  2.         public static void main(String[] args) {
  3.                 // 前三个人买,第四个人不买,第五第六个人买,第七个不买第八个第九个买
  4.                 // x个人买的话
  5.                 Scanner scanner = new Scanner(System.in);
  6.                 System.out.println("请输入有多少人:");
  7.                 int x = scanner.nextInt();
  8.                 if (x <= 3) {
  9.                         System.out.println("需要" + x + "瓶");
  10.                 }else if(x>3){
  11.                         System.out.println((x/3*2+1)+(x%3-1));
  12.                 }
  13.         }

  14. }
复制代码

作者: Dyna    时间: 2015-4-13 22:34
静静的做个沙发!!
作者: 侯永凯    时间: 2015-4-14 22:43
前来顶贴




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2