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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾翀   /  2014-7-30 21:09  /  8155 人查看  /  118 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

LFW 中级黑马 2014-7-31 18:50:52
41#
hejinzhong 发表于 2014-7-31 18:48
对对对,我算错了  (28/3)*2+28%3 =19

我觉得板凳的代码最好理解,最容易被接受。
回复 使用道具 举报
blz01003hm 发表于 2014-7-31 18:50
你这不够了的,17换得5瓶余2个瓶盖,5瓶换得1瓶余2个瓶盖,2+2还得1瓶余2个瓶盖,17+5+1+1=24 ...

开始的17,我算错了,
应该是 (28/3)*2+28%3 =19        (9x2+1)
你试试19
回复 使用道具 举报

好屌的样子,逻辑不错啊
回复 使用道具 举报
hejinzhong 发表于 2014-7-31 18:51
开始的17,我算错了,
应该是 (28/3)*2+28%3 =19        (9x2+1)
你试试19

我抽到的题目是  有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
很坑啊
回复 使用道具 举报
blz01003hm 发表于 2014-7-31 18:56
我抽到的题目是  有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1 ...

这个我论坛有个,我在他代码上改了下,就昨天的。
结果是,原来序号为1的人
回复 使用道具 举报
hejinzhong 发表于 2014-7-31 18:58
这个我论坛有个,我在他代码上改了下,就昨天的。
结果是,原来序号为1的人 ...

啊,我的是 92列
public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        int p = 100;//有100人
        /**** 初始化人员 ***/
        boolean[] per = new boolean[p];// boolean数组表示站成一圈的人,false表示退出
        for (int i = 0; i < per.length; i++) {
           per = true;
        }

        /**** 报号 ***/
       int t = 0, len = per.length;
       while (len > 1) {
            for (int i = 0; i < per.length; i++) {

                if (per) {
                    t++;
                    if (t == 14) {
                       t = 0;
                       per = false;
                        len--;
                    }
                }
            }
       }
        /***** 结果 *****/
       for (int i = 0; i < per.length; i++) {
           if (per) {
               System.out.println("剩下的人:" + (i+1));
          }
       }
       //System.out.println("最后的情况:" + Arrays.toString(per));     
        
    }
回复 使用道具 举报
blz01003hm 发表于 2014-7-31 18:59
啊,我的是 92列
public static void main(String[] args) {
        // TODO Auto-generated method stu ...

先出去买菜了,一会回来看下你的代码
回复 使用道具 举报
赞一个   写得很简洁。
回复 使用道具 举报
学习了~
回复 使用道具 举报
可不可以告诉我这个2*x+2  是什么意思 ?

点评

x是和水人数,2*x意思是喝完水之后每个人手中都有一个没有瓶盖的水瓶(也就是2x个瓶盖),+2个意思是x个人中最多有2个人手中有瓶盖 ;  发表于 2014-8-1 15:17
回复 使用道具 举报
dreamseekerkun 来自手机 中级黑马 2014-8-1 00:08:01
51#
没有思路,入学测试好难这个题
回复 使用道具 举报
这题目挺简单的,以前做过很多类似的智力题。
回复 使用道具 举报
本帖最后由 郑飞 于 2014-8-1 01:30 编辑

/*思路:
1:正向思维,从0开始买可乐,28和50作为控制条件;
2:每买一瓶进入一次for循环,记得每次盖子数和可乐数都增加1;
3:进入for循环后,换可乐是个问题,所以我用了while循环把盖子全部换成可乐;
        每次换到的可乐数=盖子/3 +盖子%3(这个理解了其他就好办了);               
*/
class HeiMa{
        
        public static void main(String[] args){
        hekele(28);
        hekele(50);
        }
                public static void hekele(int man){

                        int kele;//买的可乐数
                        int gaizi ;//盖子数
                        int people = 0;//喝到可乐的人数
                        int change = 0;//换到的可乐数//

                        for(kele=0,gaizi=0;people<man;kele++,gaizi++){
                                while(gaizi>2){
                                change = change + gaizi/3; //更新换到的可乐数(这里把当前盖子都换成可乐了)
                                gaizi =gaizi/3+ gaizi%3;  // 更新剩余盖子数(现在盖子数=上一步换可乐剩下的盖子数+换来的可乐所带的盖子数)
                                }
                                people = kele + change ;//喝到可乐的人数=买的可乐+换的可乐
                                if(people==man){
                                System.out.println("kele="+kele);
                                }
                        }
                }
}
回复 使用道具 举报
M单色调 来自手机 中级黑马 2014-8-1 03:21:56
54#
我觉得是个数列问题!1.2.3.3.4.5.5.6.7.7.8.9.9.10.11.11....然后求出第n项和总项数就ok可了!
回复 使用道具 举报
本帖最后由 赵顺超 于 2014-8-1 10:00 编辑
  1. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
  2. *         假如是50人,又需要买多少瓶可乐?
  3. *
  4. *         
  5. *                                 28个人需要买19瓶可乐
  6. *                                 50个人需要买34瓶可乐
  7. *
  8. *
  9. * 思路:
  10. * 1,因为买了可乐后,3个瓶盖可以换新的可乐喝,所以当手中有两个瓶盖时,
  11. *             就需要考虑能否先向卖可乐的老板借一瓶可乐的问题了,即最后一瓶是由手里的2个瓶盖跟向老板借的可乐瓶盖换的。
  12. *             这样就可以多一个人喝可乐。
  13. * 2,经分析得出以下一张表格
  14. *   ---------------------------------------------------------
  15. *                                                           若不能借一瓶
  16. * 买了几瓶        1        2        3        4        5        6        7        8        9        10 ...
  17. *  喝可乐人数        1        2        4        5        7        8        10        11        13        14 ...
  18. *  剩余瓶盖数        1        2        1        2        1        2        1        2        1        2  ...
  19. *   ---------------------------------------------------------
  20. *                                                         若能借一瓶
  21. *      买了几瓶        1        2        3        4        5        6        7        8        9        10 ...
  22. *     喝可乐人数        1        3        4        6        7        9        10        12        13        15 ...
  23. *     剩余瓶盖数        1        0        1        0        1        0        1        0        1        0  ...
  24. *    ---------------------------------------------------------
  25. * 3,查看上表,可以得出,买的可乐瓶数是从1开始递增的,        
  26. *             在不能借一瓶的情况中,当买奇数瓶时,喝可乐人数比少买1瓶时的喝可乐人数多2人,
  27. *             当买偶数瓶时,喝可乐人数比少买1瓶时的喝可乐人数多1人。
  28. *             在能借一瓶的情况中,当买奇数瓶时,喝可乐人数比少买1瓶时的喝可乐人数多1人,
  29. *             当买偶数瓶时,喝可乐人数比少买1瓶时的喝可乐人数多2人。
  30. * 4,这种情况,可以使用数组,来模拟计算。
  31. *                 
  32. *
  33. * 步骤:
  34. * 1,定义getKeko方法,在方法中,定义int数组,设置0角标数为1,并将喝可乐人数y作为参数。
  35. * 2,当y=1时,返回1,使用%来判断x是奇数还是偶数,因为存在0号角标,当x%1=1时为偶数,当x%2=0时为奇数。
  36. * 3,使用for循环,让买可乐瓶数x递增,数组中的奇数项(x%2=0)+2偶数项+1,并判断数组的值在是否大于或等于y。
  37. * 4,当数组中的数值满足条件时,返回x+1。
  38. * 5,定义getKeko2方法,模拟能借一瓶的情况,与getKeko方法相反,奇数时+1,偶数时+2。
  39. * 6,在主函数中调用两个方法,发现无论能否借一瓶,28人需要买19瓶可乐,50人需要买34瓶可乐。
  40. *
  41. *
  42. *
  43. */
  44. public class Test10 {

  45.         public static void main(String[] args) {
  46.                
  47.                 //28人喝可乐的情况
  48.                 int y = 28;
  49.                
  50.                 System.out.println("如果不能向老板借一瓶可乐,那么"+y+"个人需要买"+getKeko(y)+"瓶可乐");
  51.                 System.out.println("如果能向老板借一瓶可乐,那么"+y+"个人需要买"+getKeko2(y)+"瓶可乐");
  52.                
  53.                 //打印结果的分隔符
  54.                 System.out.println("---------------------");
  55.                
  56.                 //50人和可乐的情况
  57.                 int y2 = 50;
  58.                 System.out.println("如果不能向老板借一瓶可乐,那么"+y2+"个人需要买"+getKeko(y2)+"瓶可乐");
  59.                 System.out.println("如果能向老板借一瓶可乐,那么"+y2+"个人需要买"+getKeko2(y2)+"瓶可乐");
  60.                
  61.         }
  62.         
  63.         public static int getKeko(int y){
  64.                 //定义数组
  65.                 int[] arr = new int [y];
  66.                
  67.                 //数组的0号元素为1
  68.                 arr[0] = 1;
  69.                
  70.                 //当1人喝可乐时,返回1
  71.                 if(y==1){
  72.                         return 1;
  73.                 }
  74.                
  75.                 //for循环模拟买可乐瓶数的增加
  76.                 for(int x=1;x<y;x++){
  77.                         
  78.                         //偶数瓶,当前数组元素等于前一元素+1
  79.                         if(x%2 == 1){
  80.                                 arr[x] = arr[x-1] + 1;
  81.                                 if(arr[x] >= y){
  82.                                         return x+1;
  83.                                 }
  84.                         }
  85.                         
  86.                         //奇数瓶,当前数组元素等于前一元素+2
  87.                         if(x%2 == 0){
  88.                                 arr[x] = arr[x-1] +2;
  89.                                 if(arr[x]>=y){
  90.                                         return x+1;
  91.                                 }
  92.                         }
  93.                 }
  94.                 return -1;
  95.         }
  96.         
  97.         public static int getKeko2(int y){
  98.                 //定义数组
  99.                 int[] arr = new int [y];
  100.                
  101.                 //数组的0号元素为1
  102.                 arr[0] = 1;
  103.                
  104.                 //当1人喝可乐时,返回1
  105.                 if(y==1){
  106.                         return 1;
  107.                 }
  108.                 //for循环模拟买可乐瓶数的增加
  109.                 for(int x=1;x<y;x++){
  110.                         
  111.                         //偶数瓶,当前数组元素等于前一元素+2
  112.                         if(x%2 == 1){
  113.                                 arr[x] = arr[x-1] + 2;
  114.                                 if(arr[x] >= y){
  115.                                         return x+1;
  116.                                 }
  117.                         }
  118.                         //奇数瓶,当前数组元素等于前一元素+1
  119.                         if(x%2 == 0){
  120.                                 arr[x] = arr[x-1] +1;
  121.                                 if(arr[x]>=y){
  122.                                         return x+1;
  123.                                 }
  124.                         }
  125.                 }
  126.                 return -1;
  127.         }
  128. }
复制代码

回复 使用道具 举报
本帖最后由 裤裆里的温柔、 于 2014-8-1 15:15 编辑

不用搞这么麻烦,10行代码足矣,只测试了28和50通过,其他没试
  1. public class TestCoCo {
  2.         public static void main(String[] args) {
  3.                 int man =50;
  4.                 int count = 0 ,again = 0 ,buy = 0,bottle=0;       
  5.                 while (man > bottle) {
  6.                         buy++;
  7.                         bottle++;
  8.                         again++;
  9.                        
  10.                         if (buy == 3) {
  11.                                 bottle++;
  12.                                 buy = 1;
  13.                         }
  14.                 }
  15.                 System.out.println(again);
  16.         }
  17. }
复制代码




回复 使用道具 举报
不明知了
回复 使用道具 举报
拿50个人喝水来说,最后结果就是 50个人都喝了水,    50个人手中一定有50个没有瓶盖的瓶子(也就等于100个瓶盖),但是50个人手中也许有0个1个或者2个瓶盖    所以50个人手中有小于等于102个瓶盖,大于等于100个瓶盖!  所以  100<=3*y<=102;  但是人要够喝水就只能看3*y<=102  并且  y只能取最大值;
回复 使用道具 举报
F@C 来自手机 中级黑马 2014-8-1 17:21:56
59#
进来学习
回复 使用道具 举报
LFW 发表于 2014-7-31 16:14
支持这个想法的跟我一起喊:V5。搞复杂了就没意义了

都是,,这个才叫简单明了,而且有逻辑
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马