我正在编写一个程序来检查给定的数字序列是否在AP,GP或HP中。我知道AP是基于共同的差异,GP是基于共同的比例。我的代码适用于AP和GP,但不适用于HP。在下面的代码中应进行哪些更正,还有一种方法可以优化我的代码。以下是程序:

import java.util.*;
class APGPHP
{
public static void main(String[] args)
{
    int n;
    System.out.println("Enter the number of elements in the series");
    Scanner s = new Scanner(System.in);
    n = s.nextInt();
    int[] a = new int[n];
    System.out.println("Enter the numbers");
    for (int i = 0;i<n ; i++)
    {
        System.out.println("Enter the number ["+(i+1)+"] :");
        a[i] = s.nextInt();
    }
    CheckAPGPHP(a);
}

public static void CheckAPGPHP(int[] a)
{
    if(a.length<3)
    {
        System.out.println("Array should contain atleast 3 elements ");
        return;
    }
    if(CheckAP(a) == 1)
    {
        System.out.println("AP");
        if (CheckHP(a) == 1)
            System.out.println("HP");
    }

    if(CheckGP(a) == 1)
        System.out.println("GP");
}

public static int CheckAP(int[] a)
{
    int iDiff=a[1]-a[0];
    for(int i=0;i<a.length-1;i++)
    {
        if((a[i+1]-a[i])!=iDiff)
            return -1;
    }
    return 1;
}

public static int CheckGP(int[] a)
{
    int iRatio=a[1]/a[0];
    for(int i=0;i<a.length-1;i++)
    {
        if((a[i+1]/a[i])!=iRatio)
            return -1;
    }
    return 1;
}

public static int CheckHP(int[] a)
{
    float[] b = new float[a.length];
    for (int i =0;i<=b.length-1 ;i++ )
    {
        b[i] = 1.0f/a[i];
    }
    float iDiff=b[1]-b[0];
    for(int i=0;i<b.length-1;i++)
    {
        if((b[i+1]-b[i])!=iDiff)
            return -1;
    }
    return 1;
}
}

最佳答案

首先,而不是检查相等性,而是检查数字是否在彼此的较小公差之内,例如1e-6左右。原因是浮点除法不精确。

例如,在python(5.0-4.9)中返回0.09999999999999964,而不是1。我知道这不是除法运算,但这是一个简单的例子,说明浮点运算并不精确。

关于java - 要检查给定的数字序列是算术级数还是几何级数或调和级数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22132399/

10-11 03:52