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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
思路:
买可乐喝,3个瓶盖可以换一瓶可乐。所以现在首先要想的问题是:买了多少可乐-->有多少个瓶盖-->可以换多少可乐-->剩下多少瓶盖-->还可以换多少可乐-->还有多少瓶盖。。。发现有点像递归。2.首先要创建一个买了多少瓶可乐,然后又多少个瓶盖的程序。
  1. // 盖子数
  2.                 int x = a;
  3.                 // 瓶子数
  4.                 int i = a;       
  5.                 // 当盖子数少于2的时候,就不能换可乐
  6.                 while (x >2 ) {
  7.                         // 可乐总个数
  8.                         i = i + x / 3;
  9.                         // 瓶盖剩余个数
  10.                         x = x / 3 + x % 3;
  11.                 }
  12.                 // 瓶子总数
  13. System.out.println("总共能获得可乐瓶数:" + i + "---剩余瓶盖数:" + x);
复制代码
3.突然发现这个方法就想是一个3进制的数。4.写出代码后发现,过于复杂,所以既然3个盖子换一瓶,一瓶带一个瓶盖,相当于2个盖子换一瓶没有盖子的,设需要买x瓶可乐,既x+x/2≥28,既x≥56/3,取整,得x=19,但是此方法存在问题。当最后剩下2个瓶盖的时候,就会出现多出一瓶可乐的情况。5.能不能通过反算来解决问题呢?现在一个可乐都没有,从0开始计算,每多3瓶就少买一瓶,然后得到总瓶数。然后瓶盖为1。
  1. // 空瓶数
  2.                 int i = 0;
  3.                 // 总瓶数(需要买的)
  4.                 int sum = 0;
  5.                 for (int x = 0; x < a; x++) {
  6.                         if (i != 3) {
  7.                                 i = i + 1;
  8.                                 sum = sum + 1;
  9.                         } else if (i == 3) {
  10.                                 i = 1;
  11.                         }
  12.                 }
  13.                 return sum;
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 入学去吧

查看全部评分

6 个回复

倒序浏览
哈哈 谢谢版主了!~~~
回复 使用道具 举报
如果买3瓶,相当于买4瓶,多出1个瓶盖
如果买6瓶,相当于买8瓶,多出2个瓶盖
如果买9瓶,相当于买12瓶,多出3个瓶盖

假如有x个人,需要买 (x/4*3+x%4)瓶,多出(x/4+x%4)个瓶盖
则x个人需要买(x/4*3+x%4)-(x/4+x%4)/3瓶可乐。
回复 使用道具 举报
有自己的想法,很棒!
回复 使用道具 举报
这是我写的,和你比起来怎样?{:soso_e120:}
我开始没看你的思路,昨天晚上就把题目记下来了,上班有时间想想思路,回来调试了下,共勉
public class BuyDrink {
        public static void main(String[] args) throws IOException {
                int person = 0;
                person = readKey();
                // System.out.println(person);
                buyDrink(person);
        }

        public static void buyDrink(int person) {

                int temp = 0, buy = 0, free = 0;
                if (person <= 3)
                        System.out.println("人数较少,您需要购买" + person + "瓶汽水.");
                else {
                        for (buy = 3, temp = 3; (buy + free) < person; ) {
                                if (temp == 3) {
                                        free++;
                                        temp = 1;
                                }
                                if ((buy + free) < person) {
                                        buy++;
                                        temp++;
                                }
                        }
                System.out.println("您需要购买" + buy + "瓶汽水,免费送您" + free + "瓶汽水,"+"还有"+temp+"个

盖子");
               
        }

        public static int readKey() throws IOException {
                System.out.println("请输入人数:");
                int ch;

                StringBuilder sb = new StringBuilder();
                BufferedInputStream is = new BufferedInputStream(System.in);
                while ((ch = is.read()) != -1) {
                        if (ch == '\r')
                                continue;
                        if (ch == '\n')
                                return Integer.parseInt(sb.toString());
                        if (Character.isDigit((char) ch))
                                sb.append((char) ch);
                }
                return Integer.parseInt(sb.toString());
        }
}
回复 使用道具 举报
本帖最后由 NetTravel 于 2014-2-19 20:37 编辑

用c 写的,思路:使用while循环,一直买下去,
直到满足条件coke+coke/3<count为止

  1. #include <stdio.h>
  2. void main()
  3. {               
  4.         //cool表示买了的可乐
  5.         int coke=0;
  6.         //count表示需要和可乐的人数
复制代码

回复 使用道具 举报
高怀 中级黑马 2015-3-15 15:01:25
7#
好难  不会啊    这么难  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马