我需要创建一个程序来测试用户输入的给定数字是否为三角形数字。
我创建了一个脚本,只提供了所有三角形数字的列表,但在此程序中,用户需要输入一个数字,程序必须确定该数字是否为三角形。
答案 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)
三角形数字是形成等边三角形的数字模式。
序列中的每个后续数字都会在三角形中添加新的点行,例如:
知道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