Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
БромГексин
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 23
Завершенные тесты: 4
1

Проверить число на "треугольность"

19.06.2018, 11:24. Просмотров 800. Ответов 14
Метки нет (Все метки)

Треугольное число - это количество точек, которые могут заполнять равносторонний треугольник.

Пример: число 6 является треугольным числом, потому что все стороны треугольника имеют одинаковое количество точек.
Подсказка!
T (n) = n * (n + 1) / 2,
n - размер одной стороны.
T (n) - треугольное число.

Учитывая число «a» из интервала [1; 2147483646], найдите, если это треугольное число или нет.

C#
1
2
3
4
5
6
7
8
9
10
11
 public static bool isTriangular(int a)
        {
                for (int i = 1; i <= 2147483646; i++)
            {
                if (a == i * (i + 1) / 2)
                {
                        return true;
                }
            }
            return false;
        }
считает не корректно, почему?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2018, 11:24
Ответы с готовыми решениями:

Проверить истинность высказывания: "Число А является положительным"
Дано целое число А. Проверить истинность высказывания: &quot;Число А является положительным&quot;. ...

Проверить, правильно ли в тексте записаны буквосочетания "жи" и "ши"
Дана последовательность слов. Проверить, правильно ли в нем записаны буквосочетания жи и ши....

Проверить, правильно ли в предложении записаны буквосочетания "жи" и "ши"
Дана последовательность слов. Проверить, правильно ли в ней записаны буквосочетания &quot;жи&quot; и &quot;ши&quot;....

Проверить, правильно ли в строке записаны сочетания "жи" и "ши"
1)Дана последовательность слов. Проверить, правильно ли в ней записаны сочетания &quot;жи&quot; и &quot;ши&quot;....

Описать класс "поезд", содержащий поля "пункт назначения", "номер поезда", "время отправления"
Помогите пожалуйста с классом Описать класс «поезд», содержащий следующие закрытые поля:...

14
Biger18
146 / 140 / 85
Регистрация: 13.06.2018
Сообщений: 590
19.06.2018, 12:04 2
Цитата Сообщение от БромГексин Посмотреть сообщение
число 6 является треугольным числом
Цитата Сообщение от БромГексин Посмотреть сообщение
T (n) = n * (n + 1) / 2,
как тут получить 6?
0
Krapivnik
29 / 28 / 6
Регистрация: 15.03.2018
Сообщений: 63
19.06.2018, 12:09 3
При n=3
T(n)=6
0
БромГексин
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 23
Завершенные тесты: 4
19.06.2018, 12:11  [ТС] 4
Цитата Сообщение от Biger18 Посмотреть сообщение
как тут получить 6?
n=3?
посмотрите
0
SeIZVeIZ
691 / 635 / 269
Регистрация: 08.02.2014
Сообщений: 1,961
Завершенные тесты: 3
19.06.2018, 12:19 5
Цитата Сообщение от БромГексин Посмотреть сообщение
считает не корректно, почему?

пример некорректного подсчёта есть?
0
БромГексин
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 23
Завершенные тесты: 4
19.06.2018, 12:23  [ТС] 6
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
пример не корректного подсчёта есть?
у преподавателя есть "тестовые числа", на которых он проверяет работу, но он их не озвучивает
0
Krapivnik
29 / 28 / 6
Регистрация: 15.03.2018
Сообщений: 63
19.06.2018, 12:27 7
БромГексин, посмотри условие задачи. Если ты всё верно указал, то твое число a (предположительно треугольное) должно лежать в интервале от 1 до 2147483646.
В своём коде ты в цикле в этом интервале перебираешь другое число (n или i). Это неправильно. Кроме того сам код корявый (без обид).
Я предлагаю ничего не перебирать в цикле, а решить квадратное уравнение вида n^2+n+(1-2a)=0.
Находим положительный корень (n).
Округляем до ближайшего.
Делаем проверку: подставляем найденное и округленное n в уравнение.
Если заданное 'a' действительно было треугольным числом, то уравнение сойдется.
Сможешь сам закодить?

P.S. как цитирование сообщений работает - не разберусь.
0
БромГексин
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 23
Завершенные тесты: 4
19.06.2018, 12:32  [ТС] 8
Цитата Сообщение от Krapivnik Посмотреть сообщение
посмотри условие задачи. Если ты всё верно указал, то твое число a (предположительно треугольное) должно лежать в интервале от 1 до 2147483646.
В своём коде ты в цикле в этом интервале перебираешь другое число (n или i). Это неправильно. Кроме того сам код корявый (без обид).
Я предлагаю ничего не перебирать в цикле, а решить квадратное уравнение вида n^2+n+(1-2a)=0.
Находим положительный корень (n).
Округляем до ближайшего.
Делаем проверку: подставляем найденное и округленное n в уравнение.
Если заданное 'a' действительно было треугольным числом, то уравнение сойдется.
Сможешь сам закодить?
не очень понятен алгоритм, буду очень признателен, если приведете алгоритм реализации
0
Woldemar89
TheGreatCornholio
1210 / 690 / 280
Регистрация: 30.07.2015
Сообщений: 2,363
Завершенные тесты: 1
19.06.2018, 12:35 9
Лучший ответ Сообщение было отмечено БромГексин как решение

Решение

Решение квадратного уравнения, если корень целый - значит число треугольное.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public static bool IsTriangle(int value, out int n)
        {
            double nval = -0.5 + Math.Sqrt(1 + 8 * value) / 2.0;
 
            n = 0;
 
            if (nval - (int)nval == 0.0)
            {
                n = (int)nval;
                return true;
            }
 
            return false;
        }
2
БромГексин
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 23
Завершенные тесты: 4
19.06.2018, 12:48  [ТС] 10
Woldemar89, ваш код прошел тесты, огромное спасибо, но преподаватель сказал, что задача решается в одну строчку:
C#
1
2
3
4
public static bool isTriangular(int T)
        {
            return Math.Sqrt(1 + 8*T) % 1 == 0;
        }
0
КОП
547 / 397 / 127
Регистрация: 15.08.2010
Сообщений: 1,118
Завершенные тесты: 1
19.06.2018, 12:52 11
Цитата Сообщение от БромГексин Посмотреть сообщение
что задача решается в одну строчку
все задачи решаются в одну строчку
1
Woldemar89
TheGreatCornholio
1210 / 690 / 280
Регистрация: 30.07.2015
Сообщений: 2,363
Завершенные тесты: 1
19.06.2018, 13:04 12
Цитата Сообщение от БромГексин Посмотреть сообщение
ваш код прошел тесты, огромное спасибо, но преподаватель сказал, что задача решается в одну строчку
Однако, метод вашего преподавателя не возвращает сторону треугольника
Насчет замены приведения к int и вычитания на % 1 можно подумать конечно, но мне лень выяснять, где вычислительная сложность и затраты памяти больше
0
Krapivnik
29 / 28 / 6
Регистрация: 15.03.2018
Сообщений: 63
19.06.2018, 13:14 13
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Однако, метод вашего преподавателя не возвращает сторону треугольника
Насчет замены приведения к int и вычитания на % 1 можно подумать конечно, но мне лень выяснять, где вычислительная сложность и затраты памяти больше
И у вас обоих с преподавателем нет проверки на вхождение в диапазон, кстати
0
Woldemar89
TheGreatCornholio
1210 / 690 / 280
Регистрация: 30.07.2015
Сообщений: 2,363
Завершенные тесты: 1
19.06.2018, 13:24 14
Цитата Сообщение от Krapivnik Посмотреть сообщение
нет проверки на вхождение в диапазон
А зачем?
0
Krapivnik
29 / 28 / 6
Регистрация: 15.03.2018
Сообщений: 63
19.06.2018, 13:28 15
Цитата Сообщение от Woldemar89 Посмотреть сообщение
А зачем?
Собственно и не нужно.
В условиях задачи почему-то было так:
Цитата Сообщение от БромГексин Посмотреть сообщение
Учитывая число «a» из интервала [1; 2147483646]
Не забивайте голову
0
19.06.2018, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2018, 13:28

Подсчитать общее число вхождений в текст символов "+" и "–"
Пожалуйста помогите решить на C#!Срочно надо!Дан текст. Подсчитать общее число вхождений в него...

Методом вычислить тип треугольника: "не существует", "тупоугольный", "прямоугольный", "остроугольный"
Помогите пожалуйста С помощью метода вычислить тип треугольника::cry: 1) если первый параметр...

Построить иерархию классов "Студент", "преподаватель", "персона", "заведующий кафедрой"
Построить иерархию классов: Студент, преподаватель, персона, заведующий кафедрой 1) Разработать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru