当前位置: 首页 > 知识库问答 >
问题:

如何在Java程序中实现约束?

陶锋
2023-03-14

我出现在一个面试中,要求我编写一个程序来找到N以下的最大斐波那契数。虽然我成功地获得了许多测试用例的输出,但我的代码在边缘测试中失败了。

这是我的代码:

import java.util.*;
import java.lang.Math;


class LargestFibonacciNumber{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        if(t<=Math.pow(10,4)){
            while (t-->0) {
            int n = sc.nextInt();
            if(n > 0 && n<= Math.pow(10,9)){
                int result = largestFibonacciNumber(n);
            System.out.println(result);}
            
        }
        sc.close();
        }
        
    }

    static int largestFibonacciNumber(int n){
        
        
            if(n == 0){
            return 0;
        }

        int first = 0, second = 1;
        int third = first + second;

        while(third < n){
            first = second;
            second = third;
            third = first + second;
        }

        return second;
        
    }
}

以下是问题陈述:

问题描述

给定一个数N,你必须找到小于N的最大斐波那契数。

输入格式

第一行包含一个整数T-测试用例数。

接下来的T行各有一个给定的数字N

输出格式

将每个测试用例的答案打印在单独的一行中。

约束条件

T

0

我的代码有什么问题导致边缘测试失败?我猜这与我无法理解的约束有关。

共有2个答案

陶刚豪
2023-03-14

正如马特·蒂默曼斯在评论部分提到的那样,您的代码返回N=1的错误答案。

当N=1时,代码必须返回1。

您必须将第一个if的条件更改为以下内容:

if(n ==0 || n == 1)

// or better way:
if(n <= 1)

我建议你通过递归计算斐波那契。这是一种适用于您的应用程序的更快、更轻的解决方案。

static int largestFibonacciNumber(int n) {
    if(n <= 1)
       return n;
    return largestFibonacciNumber(n-1) + largestFibonacciNumber(n-2);
}

你可以在这里了解更多。

方祺
2023-03-14

添加n=1的条件检查。

静态整数(int n){

    if(n == 0)
        return 0;
    if(n == 1)
        return 0;
    

    int first = 0, second = 1;
    int third = first + second;

    while(third < n){
        first = second;
        second = third;
        third = first + second;
    }
    return second;
}

那么n=1就不会失败

 类似资料:
  • 问题内容: 作为Java编程领域的新手,这个问题一直困扰着我。我首先相信所有Java文件都会被压缩并随后运行,但是我很快意识到情况并非总是如此。有人可以向我解释我们如何将Java应用程序实际上编织到日常生活的真实产品中吗? TL; DR:我们如何实现实际使用的代码? 问题答案: 这取决于应用程序。有许多选项,取决于您希望用户如何使用您的应用程序。通常将其包装为罐子或专用罐子(战争,耳朵)。 从理论

  • 问题内容: 使OAuth提供程序以Java运行的最快/最简单方法是什么?具体来说,我需要授权第三方应用访问某些Web服务(我正在考虑使用OAuth进行令牌身份验证)。 我一直在寻找在新泽西州的OAuth扩展,但提到这里,它没有提供一个完整的服务供应商。 问题答案: 有一些Java库可用于OAuth。具体来说,我来看看这个。我自己没有使用过,但是有一个运行OAuth服务提供商的示例。 OAuth网站

  • 我一直在努力尝试让Bouncy Castle Scrypt进入我的web应用程序进行密码加密。我对Java编程和安全性相当陌生。 我试着查看了Bouncy Castle的Scrypt类文档。然而,我真的很难弄清楚它是如何工作的。它似乎并没有真正给出如何创建类或诸如此类的信息。 我在Stack Exchange和Google上搜索了一下,看看是否有什么地方可以给出一个很好的示例,说明我应该做什么来创

  • 问题内容: 有时我会看到许多应用程序,例如msn,Windows Media Player等都是单实例应用程序(当用户在应用程序运行时执行时,将不会创建新的应用程序实例)。 在中,我为此使用类,但是我不知道如何在Java中执行此操作。 问题答案: 我在主要方法中使用以下方法。这是我所见过的最简单。

  • 我正在尝试使用OpenAM在现有的web应用程序中实现SSO,请参考以下链接 http://fczaja.blogspot.com/2012/06/idp-initiated-sso-and-identity_21.html ps.我的网络应用程序已经有了自己的登录页面 现在实现后得到的是,openAM登录页面在我的web应用程序中受到保护,我需要再次登录到我的应用程序 我需要的是,想跳过我的应用

  • 我是一个初学者,我只是找不到一个可行的解决方案。 我想做的是:用户输入用户名和密码,然后应用程序登录到一个网站。如果登录失败,则返回false和正确消息,否则返回true并继续执行下一个活动(获取另一个站点,解析html并显示内容)。 我的难题是:如何检测成功登录? 这是我的密码 LoginActivity的相关代码: 身份验证类中的方法: 由于我获得了200(OK)状态,我认为POST的代码工作