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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄小贝 高级黑马   /  2012-10-23 02:57  /  1845 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄小贝 于 2012-10-23 02:59 编辑

饭后一道题,天天好心情~

题目:n个运动员比完赛后口渴了,到附近小卖部买水,正好小卖部搞促销活动,凭三个空瓶既可换一瓶水,请问他们最少需要多少个空瓶,才能使每人都有一瓶水?

这真是我这一周以来遇到的最可爱的题目~~



当我以为我似乎做出来的时候,我手贱的遍历了 n 从1 到 100 的所有结果~~



然后我似乎发现了些什么~



还记得那些年做数学题的日子吗?
  1. package day7;

  2. /**
  3. * n个运动员比完赛后口渴了,到附近小卖部买水,正好小卖部搞促销活动
  4. * 凭三个空瓶既可换一瓶水,请问他们最少需要多少个空瓶,才能使每人都有一瓶水?
  5. *
  6. * @author yellowbaby
  7. *
  8. */
  9. public class Test {

  10.         public static void main(String[] args) {
  11.                
  12.                 for (int n = 1; n <= 100; n++) {
  13.                         System.out.print("n 的值为 : " + n + " 需要的瓶子为:  ");
  14.                         System.out.println("   " + getEmptyBottleNum(n));
  15.                         
  16.                         //System.out.println(2 * n  + 1);
  17.                 }
  18.         
  19.         }

  20.         
  21.         /**
  22.          * 计算 n 个人需要多少个空瓶子
  23.          */
  24.         private static int getEmptyBottleNum(int n) {
  25.                
  26.                 for (int i = n; i <= 3 * n; i++) {
  27.                         if(howMuchBottle(i) == n){
  28.                                 return i;
  29.                         }
  30.                 }        
  31.                 return 0;
  32.         }
  33.         
  34.         
  35.         /**
  36.          * 计算  i 个瓶子可以满足多少人
  37.          */
  38.         private static int howMuchBottle(int i) {
  39.                
  40.                 int sum = 0;
  41.         
  42.                 do {        
  43.                         sum += i / 3;
  44.                         i = (i / 3) + (i % 3);
  45.                 } while (i >= 3 );
  46.                
  47.                 return sum;
  48.         }

  49. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

3 个回复

倒序浏览
路过,学习了
回复 使用道具 举报
陈琦 来自手机 中级黑马 2012-10-23 09:01:16
藤椅
很好啊,这个题中来自: Android客户端
回复 使用道具 举报
这好像只是个归纳题目吧,不知道我对题目理解的对不对:
1个运动员时要3个空瓶子--  1-->3    n*3-0    n*3-(n-1)    2*n+1  
2个运动员时要5个空瓶子--  2-->5    n*3-1    n*3-(n-1)    2*n+1  
3个运动员时要7个空瓶子--  3-->7    n*3-2    n*3-(n-1)    2*n+1   
4个运动员时要9个空瓶子--  4-->9    n*3-3    n*3-(n-1)    2*n+1   
5个运动员时要11个空瓶子-- 5-->11  n*3-4    n*3-(n-1)    2*n+1   
...
n个运动员时...  n-->   2*n+1
==========================所以代码就围绕这个算法就行了====================
  1. public class Test2 {
  2.         public static void main(String[] args) {
  3.                 for (int i = 1; i <= 100; i++) {
  4.                         System.out.println("当有 " + i + " 个运动员时,需要有瓶子数为:" + getBottle(i));
  5.                 }
  6.         }

  7.         private static int getBottle(int i) {
  8.                 return 2 * i + 1;
  9.         }
  10. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马