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

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

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

自维基百科文章你提到的那个

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; } 

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

 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"); } 

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

该算法将是O(n)。

但是你可以用二进制搜索做得更好。 为此,选择下限0和上限k,其中Tk> n。 然后检查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