A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 呐拽 中级黑马   /  2015-4-10 01:29  /  1506 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是个很经典的问题,今天听同学说了这个问题,忍不住就研究了一下,下面的代码中的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. }
复制代码

评分

参与人数 1黑马币 +10 收起 理由
李大大 + 10

查看全部评分

17 个回复

正序浏览
前来顶贴
回复 使用道具 举报
Dyna 中级黑马 2015-4-13 22:34:34
17#
静静的做个沙发!!
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
............
回复 使用道具 举报
joyjio 发表于 2015-4-11 01:30
哎,这个问题我始终弄的不是很明白!过来学习一下!

没有问题 !
回复 使用道具 举报
joyjio 来自手机 中级黑马 2015-4-11 01:30:22
13#
哎,这个问题我始终弄的不是很明白!过来学习一下!
回复 使用道具 举报
natsu647 发表于 2015-4-10 23:14
不错,挺有意思的。

早上起来发现班里好多人都在写这个!
回复 使用道具 举报
natsu647 发表于 2015-4-10 23:14
不错,挺有意思的。

早上起来发现班里好多人都在写这个!
回复 使用道具 举报
sisel 发表于 2015-4-10 23:23
数学论断可知 需要瓶数不少于2n/3,故起点可以设高点减少循环次数,再深入一点 假如可以借瓶盖,那么买2瓶 ...

代码很简洁 。不过我觉得这样的题,还是模拟一下实际的流程比较好
回复 使用道具 举报
呐拽 中级黑马 2015-4-11 01:17:08
9#

欢迎来访!!!!!!!!!
回复 使用道具 举报
sisel 中级黑马 2015-4-10 23:23:49
8#
本帖最后由 sisel 于 2015-4-10 23:26 编辑

数学论断可知 需要瓶数不少于2n/3,故起点可以设高点减少循环次数,再深入一点 假如可以借瓶盖,那么买2瓶刚好可以喝3瓶,所以这个问题很简单 =N%3>0?N%3+2*N/3:2*N/3+1
回复 使用道具 举报
不错,挺有意思的。
回复 使用道具 举报
学习学习..赞!
回复 使用道具 举报
回头试试自己能搞出来不
回复 使用道具 举报
参考一下
回复 使用道具 举报
不错哟。这个思路。
回复 使用道具 举报
学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马