码迷,mamicode.com
首页 > 其他好文 > 详细

华为研发工程师编程题

时间:2020-04-10 22:47:32      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:tin   ring   int   华为   工程师   智力题   oid   div   break   

/**
* 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,
* 她最多可以换多少瓶汽水喝?”答案是5瓶,
* 方法如下:
* 先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。
* 然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
*/

 1 /**
 2 * 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,
 3 * 她最多可以换多少瓶汽水喝?”答案是5瓶,
 4 * 方法如下:
 5 * 先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。
 6 * 然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
 7 */import java.io.IOException;
 8 
 9 import java.util.Scanner;
10 
11 public class Main{
12     public static void main(String[] args) throws IOException {
13         Scanner sc = new  Scanner(System.in);
14         while(sc.hasNext()){
15             int n = sc.nextInt();
16             if(n>=1 && n<=100){
17                 System.out.println(getNum(n));
18             }else{
19                 break;
20             }
21         }
22     }
23 
24   //递归求解
25     public static int getNum(int n) {
26         if(n<1 && n>100){
27             return -1;
28         }
29         if(n == 1){
30             return 0;
31         }
32      //如果有两个空瓶子,可以换一瓶水
33         if(n == 2){
34             return 1;
35         }
36      // n/3得到的是当前n个空瓶子可以直接换取多少瓶水
37         // n%3求的是 当前n个空瓶子换了若干瓶水之后,还剩多少个空瓶子,再加3,就是下一轮可以用来换水的空瓶子总数
38 
39         return n/3+getNum(n%3 + n/3);
40     }
41 }

 

华为研发工程师编程题

标签:tin   ring   int   华为   工程师   智力题   oid   div   break   

原文地址:https://www.cnblogs.com/sun-/p/12676484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!