测试输入的数字是否为三角形数字

时间:2013-07-05 16:41:49

标签: java math

我需要创建一个程序来测试用户输入的给定数字是否为三角形数字。

我创建了一个脚本,只提供了所有三角形数字的列表,但在此程序中,用户需要输入一个数字,程序必须确定该数字是否为三角形。

4 个答案:

答案 0 :(得分:11)

自维基百科文章以来,您所指的是

An integer x is triangular if and only if 8x + 1 is a square

你当然可以更快地进行方形检查,但这可以解决它:

public static boolean isTriangularNumber(long num) {
     long calc_num = 8*num+1;
     long t = (long) Math.sqrt(calc_num);
     if (t*t==calc_num) {
        return true;
     }
     return false;
}

答案 1 :(得分:2)

我认为这可能代表了作业的精神。

public void isTriangular(int input)
{
   int currentTriNum = 0;
   int n=0; 

   while (currentTriNum < input)
   {
     currentTriNum += n; 
     n++; 
   }

   if (currentTriNum != input) 
      System.out.println("This is NOT a triangular number");
   else 
      System.out.println("This is a triangular number"); 


}

答案 2 :(得分:0)

三角形数字是形成等边三角形的数字模式。
序列中的每个后续数字都会在三角形中添加新的点行,例如:

First_six_triangular_numbers

知道8 * n + 1是一个平方数,那么n必须是一个三角数,相应方法的方法如下:

public static boolean isTriangular(int number) {
    double val = (Math.sqrt(8 * number + 1) - 1) / 2;
    return val % 1 == 0;
}

答案 3 :(得分:-1)

如果您有三角形数字列表,则可以搜索给定数字的初始值,直到找到数字或大于gien的三角形数字。

该算法为O(n)。

但是你可以用二进制搜索做得更好。为此,选择0的下限和上限k,其中Tk> 0。 ñ。然后检查T(k / 2)。如果n是T(k / 2),则n是三角形。如果n更大,则将下限设置为k / 2 + 1,否则将上限设置为k / 2。当下限小于或等于上限时重复。

更好的是,计算三角形根并检查它是否为整数:

// check to see if x is atriangular number
let a = 8*x + 1
if a is not a square number x is not triangular
let b = sqrt(a)
let n = (b-1) / 2
if n is not an integer x is not triangle
otherwise, it is the n-th triangle