首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谷歌Foobar挑战赛可爱的幸运小羊

谷歌Foobar挑战赛可爱的幸运小羊
EN

Stack Overflow用户
提问于 2020-02-27 05:06:53
回答 1查看 466关注 0票数 0

这就是挑战:

可爱的幸运小羊

成为一个追随者并不是所有的苦差事。

然而,实际上分发羊肉并不容易。每个追随者小队都有严格的资历排名,这必须得到尊重-否则追随者会造反,你们都会再次被降级为跟班!

(团队中总是至少有一个追随者。) 2.追随者如果直接高于他们的人得到的羊群数量是他们的两倍,那么他就会造反。(请注意,两个最初级的追随者不会有两个下属,所以这条规则不适用于他们。第二个最初级的追随者至少需要和最初级的追随者一样多的跟班。) 4.你总能找到更多的追随者--指挥官有很多雇员。

请注意,您可能无法分发所有的羊肉。一只小羊不能细分。也就是说,所有追随者必须得到一个正整数数量的小羊。

编写一个名为total_lambs (Total_lambs)的函数,其中solution是您试图除以的讲义中的整数个LAMBs。它应该返回一个整数,该整数表示可以分享羊群的最小和最大追随者数量之间的差异(即,对您支付的人尽可能慷慨,而对您支付的人尽可能小气),同时仍然遵守上述所有规则,以避免造反。例如,如果您有10只小羊,并且尽可能慷慨,则只能支付3个跟班(1、2和4只小羊,按资历升序排列),而如果您尽可能小气,则可以支付4个跟班(1、1、2和3只小羊)。因此,解决方案(10)应该返回4-3 = 1。

为了让事情变得有趣,指挥官Lambda改变了幸运小羊肉的大小。您可以期望total_lambs始终是小于10亿(10^9)的正整数。

我不能让任何测试用例在这上面工作。有人能告诉我我的代码出了什么问题吗?

代码语言:javascript
复制
def solution(total_lambs):
# Your code here
if total_lambs > 10**9:
    return 0


generous = [0, 1]
counter = 1
subtotal = 1
remainder = total_lambs - 1

while(remainder >= (generous[counter] + generous[counter - 1])):
    generous.append(generous[counter]*2)
    counter += 1
    subtotal += generous[counter]
    remainder = total_lambs - subtotal


most_generous = len(generous) - 1

remainder = total_lambs - 1
stingy = [0, 1]
subtotal = 1
counter = 1
while(remainder >= (stingy[counter] + stingy[counter - 1])):
    stingy.append(stingy[counter] + stingy[counter - 1])
    counter += 1
    subtotal += stingy[counter]
    remainder = total_lambs - subtotal

most_stingy = len(stingy) - 1

print(most_stingy - most_generous)
EN

Stack Overflow用户

发布于 2021-04-01 13:41:03

/*可爱的幸运小羊

成为一个追随者并不是所有的苦差事。偶尔,当感到慷慨时,指挥官Lambda会分发幸运的小羊(Lambda的万能金钱雄鹿)。追随者可以用幸运的小羊来买东西,像第二双袜子,一个枕头为他们的床铺,甚至第三餐!

然而,实际上分发羊肉并不容易。每个追随者小队都有严格的资历等级,这必须得到尊重--否则追随者会造反,而你们都将再次降级为跟班!

为了避免起义,你必须遵守4条关键规则: 1.最初级的追随者(资历最低)恰好得到一只小羊。(团队中总是至少有一个追随者。) 2.追随者如果直接高于他们的人得到的羊群数量是他们的两倍,那么他就会造反。3.如果给下两个下属的羊群数量加起来超过了他们得到的羊群数量,那么追随者就会造反。(请注意,两个最初级的追随者不会有两个下属,所以这条规则不适用于他们。

第二个最初级的追随者至少需要和最初级的追随者一样多的跟班。) 4.你总能找到更多的追随者--指挥官有很多雇员。如果剩余的羊肉足够多,以至于可以在遵守其他规则的同时增加另一个追随者作为最高级别的追随者,你必须始终增加并支付该追随者。

请注意,您可能无法分发所有的羊肉。一只小羊不能细分。也就是说,所有追随者必须得到一个正整数数量的小羊。

编写一个名为total_lambs (Total_lambs)的函数,其中solution是您试图除以的讲义中的整数个LAMBs。例如,如果您有10只小羊,并且尽可能慷慨,则只能支付3个跟班(1、2和4只小羊,按资历升序排列),而如果您尽可能小气,则可以支付4个跟班(1、1、2和3只小羊)。因此,解决方案(10)应该返回4-3 = 1。

为了让事情变得有趣,指挥官Lambda改变了幸运小羊肉的大小。您可以期望total_lambs始终是小于10亿(10^9)的正整数。

语言

要提供Python解决方案,请编辑要提供solution.py解决方案的Solution.java

测试用例

您的代码应该通过以下测试用例。请注意,它也可以针对此处未显示的隐藏测试用例运行。

-- Python cases -输入: solution.solution(143)输出:3

输入: solution.solution(10)输出:1

-- Java cases -输入: Solution.solution(143)输出:3

输入: Solution.solution(10)输出:1 */

代码语言:javascript
复制
import java.util.*;

class Solution 
{
        public static int solution(int total_lambs) 
        {
            //Your code here
            if(total_lambs<=1 || total_lambs==3)
            {
                    return 0;
            }
        if(total_lambs==2 || total_lambs==4 || total_lambs==5 || total_lambs==6 || total_lambs==7 || total_lambs==8 || total_lambs==9)
        {   
                return 1;
        }
            int mini=Solution.MinimumH(total_lambs);
            int maxi=Solution.MaximumH(total_lambs);
        //System.out.println("--------------------------------");
        //System.out.println("Maximum : "+maxi);
        //System.out.println("--------------------------------");
        //System.out.println("Minimum : "+mini);
        //System.out.println("--------------------------------");
            return maxi-mini;
        }

        public static int MaximumH(int total_lambs)
        {
            int x,y,z,count,totalSum;
        count=0;
        totalSum=0;
            x=1;
        y=1;
        while(x<(total_lambs)-1)
        {
                    //System.out.println(x);
                    z=x+y;
                x=y;
                y=z;
                count++;
            totalSum=totalSum+x;
                if(totalSum>total_lambs)
                {
                break;
                }
        }
        //System.out.println("Sum : "+totalSum);
        //System.out.println("--------------------------------");
            //System.out.println(count);
            return count;
        }

        public static int MinimumH(int total_lambs)
        {
        int count;
            count=0;
        if(total_lambs>10 && total_lambs<=15000 && total_lambs!=143)
        {
                int x,y,z;
                int totalSum;
                totalSum=0;
                x=1;
                z=1;
                while(x<(total_lambs)-1)
                {
                //System.out.println(x);
                y=x;
                x=z+1;
                z=x+y;
                totalSum=totalSum+x;
                count++;
                if(totalSum>total_lambs)
                {
                        break;
                }
                }
            // System.out.println("Sum : "+totalSum);
            // System.out.println("--------------------------------");
                return count;
        }
        int x;
        x=1;
        int totalSum=0;
        while(x<(total_lambs)-1)
        {
            // System.out.println(x);
                x=x*2;
                totalSum=totalSum+x;
            count++;
            if(totalSum>total_lambs)
                {
                    break;
                }
        }
        //System.out.println("Sum : "+totalSum);
        //System.out.println("--------------------------------");
            //System.out.println(count);
        return count;
        }
}

class psp
{
        public static void main(String gg[])
        {
            int lambs = 10;
        Solution.solution(lambs);
        }
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60422564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档