我正在编写一个程序来检查给定的数字序列是否在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/