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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 时过境迁 中级黑马   /  2015-4-9 19:51  /  660 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*28人喝汽水。三个瓶盖可以换一瓶汽水。
问:28人每人喝一瓶汽水最少买几瓶汽水
*/
import java.util.Scanner;
class A
{
public static void main(String[] args){
  Scanner sc = new Scanner(System.in);
  System.out.println("请输入喝汽水的人数:");
  int number = sc.nextInt();
  int a = people(number);//变量a记录返回的值(最低瓶数)
  System.out.print("最少买"+a+"瓶可以满足");
  
}

public static int people(int ping){//
  //定义一个计数器
  int count=0;
  for(int x = 0; x <= ping;x++){
   if(x%3==0)
   {
    x++;//当喝到三瓶的倍数时可以多喝一瓶,这次不被记录
   }
    count++;
  }
  return count;//返回
}
}

评分

参与人数 1黑马币 +4 收起 理由
飘零宾 + 4 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 sisel 于 2015-4-9 20:52 编辑

刚才口算错了。。算法应该是28-9@3=19把问题看复杂了
  1. package com.itheima;

  2. public class Drink {

  3.         public static void main(String[] args) {
  4.                 System.out.println(tryGetDrinks(29));
  5.         }

  6.         private static int tryGetDrinks(int drinks) {
  7.                 int tryi=drinks/2;
  8.                 for (; tryi<drinks; tryi++) {
  9.                         int atAllDrinked = new DrinkParty(tryi).atAllDrinked();
  10.                         if(atAllDrinked>=drinks){
  11.                                 return tryi;
  12.                         }
  13.                 }
  14.                 return -1;
  15.         }
  16.        
  17.        

  18. }

  19. class DrinkParty{
  20.         int drinked,buyed,caps;

  21.         public DrinkParty(int buyed) {
  22.                 super();
  23.                 this.buyed = buyed;
  24.                 this.drinked=buyed;
  25.                 this.caps=buyed;
  26.         }
  27.        
  28.         private boolean more(){
  29.                 return caps>=3;
  30.         }
  31.        
  32.         private void rollAndDrink(){
  33.                 System.out.println(this);
  34.                 int rolled = caps/3;
  35.                 this.drinked+=rolled;
  36.                 caps=caps%3+rolled;
  37.         }
  38.        
  39.         @Override
  40.         public String toString() {
  41.                 return "[buyed:\t"+buyed+"\tdrinked:\t"+drinked+"\tcap:\t"+caps+"\t]";
  42.         }

  43.         public int atAllDrinked(){
  44.                 while(this.more()){
  45.                         this.rollAndDrink();
  46.                 }
  47.                 return drinked;
  48.         }
  49. }
复制代码


回复 使用道具 举报
sisel 发表于 2015-4-9 20:08
这个。。。。数学就可以算了3》4,9》13,27》40,故28=13*2+2,需要20瓶

19 哦  亲
回复 使用道具 举报
这个初中学过啊。最省的方式是最后把所有瓶盖兑换完。
n瓶汽水,n个瓶盖,可以换n/3瓶汽水,然后兑换回的汽水瓶盖又可以继续兑换。
有一点要注意,就是如果只有两个瓶盖,可以先赊账一瓶,喝了之后还3个瓶盖。
  如果是买18瓶汽水,喝之后,换回6瓶,再喝之后,换回两瓶,然后赊一瓶。一共18+6+2+1=27人喝到汽水。
所以应该多买一瓶,就是19瓶汽水。
代码就写买n瓶汽水最多m人喝到汽水。判断m什么时候等于28就行。
上面那个代码修改一下就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马