在线面试算法题-分糖果

源码共读

共 2653字,需浏览 6分钟

 ·

2021-07-26 22:08

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨安琪拉

来源丨安琪拉的博客


初一看题目,觉得好像很简单,后来想了还是有点东西。

这个题目的关键点在前一个人拿完糖,剩下的糖果数量一定是4的整数倍

我们来看第一个人和第二个人,第一个人把糖果分成5份,还多一个,他拿走其中的一份加多出的一个,剩下4份给第二个人,剩余糖果是不是4的整数倍。

那我们就反着推导,假如最后一个人,也就是到第五个人,糖果剩余假设为T5,T5 = 5n+1个,满足题目要求,他可以拿n+1个糖果。(平均分成5份,多一个,那其中一份和多出的一个)。

根据前面的结论,我们知道 5n +1 一定是4的整数倍,如果不满足一定不符合题目要求:前一个人剩下4份糖果给后面的人。

第四个人准备拿时剩余糖果数假设为T4, T4 =  (5n+1) / 4 * 5 + 1  这个是关键,就是(5n+1) / 4 代表求出一份糖果的数量,* 5 + 1就是糖果总数。

递推公式出来了,剩下就是写代码了,如下所示:

public class Candy {

    public static void main(String[] args) {
        //初始值为n 从最小的开始,因为满足最小糖果
        int n = 0;
        int result;
        while((result = calculateCandyNum(n)) == -1) {
            n++;
        }
        System.out.println(result);
    }

    //当前值
    private static int calculateCandyNum(int n ) {
        int currentSum = 5 * n + 1;
        int executeNum = 5 -1;
        for (int i = 0; i < executeNum; i++) {
            // 一定要被4整除
            if (currentSum % 4 != 0) {
                return -1;
            }
            currentSum = currentSum / 4 * 5 + 1;
        }
        return currentSum;
    }
}

结果:

3121


-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报