2013-07-05 2 views
3

Мне нужно создать программу для проверки, является ли заданный номер пользователем введенным треугольником.тест, если введенное число является треугольным номером

Я создал сценарий, который просто дает список всех треугольных чисел, но в этой программе пользователю нужно ввести число, и программе необходимо будет определить, является ли это число треугольным или нет.

+0

[Википедия на треугольных чисел] (http://en.wikipedia.org/wiki/Triangular_number) –

ответ

-1

Если у вас есть список треугольных номеров, вы можете выполнить поиск по сечению initail для данного номера, пока не найдете число или треугольное число, большее, чем 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 
8

С Википедией статьи вы ссылаетесь утверждать, что

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

Означает ли это то же самое, как «Forall х, если 8x + 1 представляет собой квадрат, то х является треугольной «? – Ingo

+0

Для всех треугольных чисел это означает, что 8x + 1 является квадратом. Но не могли ли быть другие числа, где то же самое? Я думаю, нужно вычислить треугольный корень и проверить, является ли оно целым. – Ingo

+1

Я не эксперт по треугольным номерам, но я тестировал все до 1000, и они были правильно проверены. – flogvit

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


} 
Смежные вопросы