首页 > 华为测试题
头像
奥利给✊
编辑于 2020-07-28 09:50
+ 关注

华为测试题

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

输入例子:
3
10
81
0

输出例子:
1
5
40
本人代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        int j = 0;
        while (true) {
            j++;
            if (j < 11) {//最多10组输入
                int data = scanner.nextInt();
                if (data > 0 && data < 101)//正整数
                    list.add(data);
                else
                    break;
            }
            else
                break;
        }
        int[] R ;
        R = getBottle(list);
        for (int i = 0; i < list.size(); i++)
            System.out.println(R[i]);
    }

    public static int[] getBottle(List<Integer> list) {
        int[] result = new int[list.size()];
        if (list.size() == 0)
            return result;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) < 2) result[i] = 0;
            if (list.get(i) == 2) result[i] = 1;
            else {
                int counter = 0, a, b;
                a = list.get(i);
                while (true) {
                    b = a % 3;
                    a = a / 3;
                    if (a != 0)
                        counter = counter + a;
                    if (a == 0 && b == 2) {
                        counter = counter + 1;
                        result[i] = counter;
                        break;
                    }
                    if (a == 0 && b < 2) {
                        result[i] = counter;
                        break;
                    }
                    a = a + b;
                }
            }
        }
        return result;
    }
}
提交结果:
请检查是否存在数组越界等非法访问情况

求大神指教



全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐