题解 | #汽水瓶#

汽水瓶

http://www.nowcoder.com/practice/fe298c55694f4ed39e256170ff2c205f

使用递归做法,不需要找规律,找规律是投机取巧罢了

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //遍历测试数据
    while (sc.hasNext()){
        int num = sc.nextInt();
        //如果输出0则退出遍历
        if(num == 0){
            break;
        }else {
            countCola(num,0);
        }
    }
}

/*递归函数*/

private static void countCola(int num,int count){
    int chuShu = num / 3;
    int yuShu = num % 3;
    //这么什么好说的,应该都看得懂
    count = count + chuShu;
    num = chuShu + yuShu;
    //如果除数加余数是1,则借不了汽水,因为喝了你也还不了
    if(num == 1){
        System.out.println(count);
        return;
    }
    //如果余数加除数是2或者3,那么你可以直接换汽水,或者借一瓶汽水,喝完再还
    if(num == 2 || num == 3){
        count++;
        System.out.println(count);
        //如果以上情况都不是,接着递归
    }else{
        countCola(num,count);
    }
}

}

全部评论
这个才是初衷的正解,直接除以2那个没有任何学习意义。
3 回复 分享
发布于 2022-05-23 14:45
牛逼啊,我就是想这么做的。隐隐约约试了很多次。
1 回复 分享
发布于 2022-09-21 21:38 江苏
public static int sum(int n) {//n就代表空瓶子 if (n == 1) { return 0; } if (n == 2) { return 1; } int sum = n / 3;//1水 //在借之前要把前面的空瓶子消耗完,借是最后一步。 int l = n % 3;//1瓶 如果剩下2瓶,那么可以借一瓶,喝完后再还回去res+1 int res = 0; boolean flag = false; if (l == 2) { res += 1; flag = true;//借据 } int tota = sum + res;//这是总水数 int totaBottle = flag?tota-1:tota+l;//这是总瓶数,如果有借据得减一个瓶子.tota+l是加上了前面余下的1 return tota + sum(totaBottle);//最后递归调用时的参数就是兑换的水瓶子+剩余的空瓶子 } https://blog.nowcoder.net/n/42969607ed8e4991b29c2624d226ff12
点赞 回复 分享
发布于 2023-01-11 19:15 陕西
代码风格很稳
点赞 回复 分享
发布于 2023-03-22 22:10 安徽
respect
点赞 回复 分享
发布于 2023-07-21 20:30 上海

相关推荐

点赞 评论 收藏
分享
评论
49
7
分享
牛客网
牛客企业服务