You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现指定逻辑求助:根据j值匹配对应区间的已过i值

Java实现三角数区间匹配逻辑

你需要处理的j值是三角数,对应关系为第i个三角数 j = 1+2+...+i = i*(i+1)/2。需求是输入任意j值,返回最大的i,使得第i个三角数≤输入j(若j处于两个三角数之间,返回前一个对应的i)。

方法一:迭代动态计算

不需要硬编码所有i-j对,通过动态迭代计算j值,直到超过输入值,即可得到目标i。逻辑直观,支持任意大小的输入j。

import java.util.Scanner;

public class TriangularNumberMatcher {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter j value: ");
        int inputJ = scanner.nextInt();
        
        int currentI = 0;
        int currentJ = 0;
        int resultI = 0;
        
        // 迭代计算直到currentJ超过输入值,记录前一个合法的i
        while (currentJ <= inputJ) {
            resultI = currentI;
            currentI++;
            currentJ += currentI;
        }
        
        System.out.println("The corresponding i value for j = " + inputJ + " is " + resultI);
        scanner.close();
    }
}

示例说明:输入39时,currentJ会依次计算为1、3、6、10、15、21、28、36、45,当currentJ=45超过39时,resultI停留在8,即为正确结果。若输入精确三角数(如36),循环会在currentJ=36时记录resultI=8,随后迭代到currentJ=45退出,返回正确值。


方法二:数学公式法

利用三角数的数学公式反向推导,无需循环,效率更高,适合处理大数值输入。

已知三角数公式 j = i*(i+1)/2,变形为二次方程 i² + i - 2j = 0,通过求根公式可得:
i = [-1 + √(1+8j)]/2
取该值的整数部分(向下取整),即为目标i。

import java.util.Scanner;

public class TriangularNumberMatcher {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter j value: ");
        int inputJ = scanner.nextInt();
        
        // 计算判别式,用long避免整数溢出
        long discriminant = 1 + 8L * inputJ;
        double sqrtDiscriminant = Math.sqrt(discriminant);
        double iValue = (-1 + sqrtDiscriminant) / 2;
        // 向下取整得到结果
        int resultI = (int) Math.floor(iValue);
        
        System.out.println("The corresponding i value for j = " + inputJ + " is " + resultI);
        scanner.close();
    }
}

示例说明:输入39时,判别式=1+8×39=313,平方根≈17.69,计算得iValue≈8.34,向下取整为8;输入36时,判别式=289,平方根=17,计算得iValue=8,直接返回正确结果。


原硬编码方法的问题

硬编码的列表仅能处理预先定义的精确匹配,无法覆盖区间场景,且输入j超过列表最大值时会返回错误结果,扩展性极差。上述两种方法完全解决了这些问题,支持所有合法正整数j的输入。

内容的提问来源于stack exchange,提问作者Kraken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:33:15