Java 测试输入的数字是否为三角形数字
我需要创建一个程序来测试用户输入的给定数字是否是三角形数字Java 测试输入的数字是否为三角形数字,java,math,Java,Math,我需要创建一个程序来测试用户输入的给定数字是否是三角形数字 我创建了一个脚本,它只给出了所有三角形数字的列表,但在这个程序中,用户需要输入一个数字,程序必须确定该数字是否为三角形。如果您有三角形数字的列表,您可以搜索给定数字的初始序列,直到你找到一个大于给定值的数字或三角形数字 这个算法将是O(n) 但是你可以用二进制搜索做得更好。为此,选择下限0和上限k,其中Tk>n。然后检查T(k/2)。如果n是T(k/2),则n是三角形。如果n更大,则将下限设置为k/2+1,否则将上限设置为k/2。当下限
我创建了一个脚本,它只给出了所有三角形数字的列表,但在这个程序中,用户需要输入一个数字,程序必须确定该数字是否为三角形。如果您有三角形数字的列表,您可以搜索给定数字的初始序列,直到你找到一个大于给定值的数字或三角形数字 这个算法将是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
因为你提到的维基百科文章中说
当且仅当8x+1为正方形时,整数x为三角形
当然,您可以加快平方检查速度,但这可以解决此问题:
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");
}
public void为三角体(int输入)
{
int currentTriNum=0;
int n=0;
while(currentTriNum<输入)
{
电流trinum+=n;
n++;
}
如果(currentTriNum!=输入)
System.out.println(“这不是一个三角形数字”);
其他的
System.out.println(“这是一个三角形数字”);
}
三角形数字是形成等边三角形的数字模式。序列中的每个后续数字都会向三角形添加一行新点,如示例所示: 知道如果
8*n+1
是一个平方数,那么n
必须是一个三角形数,相应的方法如下所示:
public static boolean isTriangular(int number) {
double val = (Math.sqrt(8 * number + 1) - 1) / 2;
return val % 1 == 0;
}
这是否意味着与“对于所有x,如果8x+1是正方形,那么x是三角形”相同?对于所有三角形数字,它认为8x+1是正方形。但是,难道就没有其他同样的数字吗?我认为必须计算三角根并检查它是否是整数。我不是三角数方面的专家,但我测试了1000个,并且检查正确。