【问题标题】:Cows in the FooLand cityFooLand 城市的奶牛
【发布时间】:2018-05-19 08:31:54
【问题描述】:

我遇到了这个问题-

FooLand 城市的奶牛是有趣的动物。他们的一个 专业与生产后代有关。 FooLand的一头牛 两岁时产下第一头小牛(雌性小牛),并且 继续生产其他小牛(一年一头雌性小牛)。

现在农夫哈罗德想知道他有多少只动物 N年结束,如果我们假设没有一只小牛死亡,给定 那一开始,他只有一只母牛犊?

输入:

第一行包含一个整数 T 表示测试次数 案例。测试用例的每一行都包含一个整数 N 问题中描述。

输出:

对于每个测试用例,在新行中打印预期的动物数量 N年结束

我通过下面的代码解决了这个问题-

public static void main (String[] args)
{
    Scanner ab=new Scanner(System.in);
    int t=ab.nextInt();  //number of test cases

    for (int i=0;i<t;i++)
    {
        int n=ab.nextInt(); //years
        int arr[]=new int[n];
        arr[0]=1;
        arr[1]=2;
        if(n>2)
        {
            for(i=2;i<n;i++)
            {
                arr[i]=arr[i-1]+arr[i-2];
            }
        }
        System.out.println(arr[arr.length-1]);


     }
}

但是当我在网上搜索时,他们在网上给出了一个非常复杂的解决方案-

https://hackerranksolutionc.blogspot.in/2017/10/cows-of-fooland.html

我尝试匹配输出,发现结果对于小数字是相同的,但对于非常大的数字是不同的。

我想知道我的解决方案有什么问题吗?

【问题讨论】:

  • 使用调试器逐一检查这两个程序,计算出结果不同的值。
  • @AndyTurner 这两个程序的算法完全不同..我想知道我的方法是否正确?
  • 但他们声称要解决同样的问题。您应该弄清楚这两种解决方案之间的关系。例如,您可以查看 N=0、N=1、N=2 等的答案。请注意,这并不能告诉您是否正确;为此,您实际上必须考虑结果是否是您在数学上所期望的。
  • 正确答案可能是 1,因为只有母牛会繁殖是不寻常的......
  • 我的猜测是,对于“非常大的数字”,您会在两者之间的某个地方出现整数溢出。但是如果没有MCVE,我们怎么知道。

标签: java fibonacci


【解决方案1】:

如果预期的时间复杂度为O(log N).,您的解决方案将不起作用 您可以将递归方程转换为矩阵形式,并使用矩阵求幂求解。

求更通用的版本解决这个问题https://www.spoj.com/problems/SEQ/

【讨论】:

    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2011-12-04
    • 1970-01-01
    • 2017-10-16
    • 2012-07-27
    • 2019-08-04
    相关资源
    最近更新 更多