|
0 / 0 / 0
Регистрация: 21.01.2016
Сообщений: 36
|
|
Определить номер треугольного числа (последовательность A000217)24.07.2016, 11:48. Показов 11067. Ответов 32
Метки нет (Все метки)
Напишите на языке C / C++ программу, определяющую номер треугольного числа (последовательность A000217 в «Энциклопедии целочисленных последовательностей»).
Вход: одно целое (возможно, со знаком «плюс» и символом «перевод строки» \n) число в диапазоне от 1 до 9'223'372'036'854'775'807. Выход: порядковый номер поданного на вход числа в последовательности треугольных чисел или 0 (ноль), если такого числа в последовательности нет. Символ 0 (ноль) должен выдаваться и во всех случаях подачи на вход некорректных (отрицательных и лежащих вне допустимого диапазона положительных числовых, а также символьных / строковых) данных. Sample Input: 10 Sample Output: 4 последовательность A000217 : https://oeis.org/A000217
0
|
|
| 24.07.2016, 11:48 | |
|
Ответы с готовыми решениями:
32
Определить порядковый номер максимальной цифры числа, считая от начала числа |
|
3 / 2 / 1
Регистрация: 30.08.2016
Сообщений: 12
|
||||||
| 31.08.2016, 08:21 | ||||||
|
_Ivana, я сейчас не в плане придерательств, а наоборот вдохновившись Вашим решением пытаюсь своё изменит на подобии Вашего, но не особо подсмативая, и вспомнил почему я выбрал long double и 128 бит.
Например, если число будет вот таким 9223372036854775806 - то в коде если мы используем unsigned long long тип в переменной t = c*(c+1)/2 - то получается здесь будет переполнение на с*с и далее результат вычислений будет не верен. Правильно же? Тогда, здесь
Правильно? или я могу не видеть некоторую "магию" (не исключаю что в умелых руках и переполнение можно учитывать и высчитывать из него корректный результат) Добавлено через 58 секунд конечно интересно, давайте. Судя по всему у Вас хорошая математическая подготовка, а такие решения, основанные на математике - всегда интересно узнавать.
0
|
||||||
| 31.08.2016, 08:27 | |||
Посмотрите границы, с которыми я вызываю свою функцию - и все поймете. А в процессе рекурсии они только сужаются! Я бы мог а и b вообще unsigned int сделать - просто поленился лишние буквы писать Поэтому в ull все отлично влезает - можете проверить ![]() (С))
0
|
|||
|
3 / 2 / 1
Регистрация: 30.08.2016
Сообщений: 12
|
|
| 31.08.2016, 12:09 | |
|
ну вот там как раз и есть магия) я вставил cout и в первой итерации будет переполнение но оно не не будет учтено, а потом из-за "магии" (границ) получается что из-за сужения потом вычисления числа становится возможным или типа того
вот например: вводим 9069927036051871146 ./a.out2 9069927036051871146 2305843008139952128 //вывод t - в первый раз - переполнение 5188146769120198656 7061644213837889536 8106479327253626880 8655918481725718528 8937393458402820096 9079819796601634816 9008465890013872128 9044107658935664640 9061954931675627520 9070885165115375616 9066419498639687680 9068652194438578176 9069768645417238528 9070326896676372480 9070047768899321856 9069908206621409280 9069977987626147840 9069943097090224128 9069925651847428096 9069934374466728960 9069930013156554240 9069927832501860096 9069926742174611328 9069927287338227520 9069927014756417376 9069927151047321936 9069927082901869528 9069927048829143420 9069927031792780390 9069927040310961903 9069927036051871146 // к концу из-за сужений - переполнения нет 9069927036051871146 4259090756 в итоге все работает правильно (ну я долго перебирал возможные почти максимальные числа) мой код тоже работает кстати, просто у меня без магии (и дробями в целочисленной задачи) а у Вас с магией и промежуточными переполнениями- но в итоге все верно - это супер, я и говорю что не исключал что в опытных руках и переполнение можно высчитывать как правильный ход вычислений) Добавлено через 3 часа 13 минут хех, не прошло и 21 минуты (ну я правда другим занимался, а ща вернулся к этой темке): я и не заметил что с*с это ж влазит (unsigned int -> ull) - так что это не переполнение ) в общем буду ожидать вашего улучшенного решение, предыдущее мне очень понравилось.
0
|
|
| 31.08.2016, 15:07 | ||||||
|
Обещанное решение, по просьбам ранимых телезрителей сделано в цикле, без рекурсии - прошу
. Количество итераций при малых входных аргументах такое же, как и в предыдущем варианте, при больших аргументах количество итераций существенно меньше (у исходного варианта количество итераций всегда одно и то же для любых аргументов). Но здесь чуть посложнее математика, деление опять же, может и съест преимущество - надо миллисекунды замерять. Но если ловить мизерные отличия, тогда и первый вариант надо оптимизировать максимально - сделать циклом вместо рекурсии и попробовать уменьшить тип пары переменных до unsigned int.
0
|
||||||
| 31.08.2016, 18:52 | |
|
0
|
|
|
24 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 160
|
|
| 31.08.2016, 19:16 | |
|
Задача с курса от mail.ru
я её решил)
0
|
|
| 31.08.2016, 22:55 | |
|
0
|
|
|
3 / 2 / 1
Регистрация: 30.08.2016
Сообщений: 12
|
||
| 05.09.2016, 20:37 | ||
|
_Ivana,
0
|
||
|
0 / 0 / 0
Регистрация: 19.04.2017
Сообщений: 2
|
||
| 19.04.2017, 15:43 | ||
|
Вернее, понятно, почему верх ограничен максимумом от uint, но почему мы стартуем с этого значения всегда? У нас же номер для всех треугольных чисел, кроме 1 и 3, заведомо меньше 1/2 от этого треугольного числа. То есть вот делить исходное число на 2 можно сходу, уже сразу сужая границы поиска. В чем смысл постоянного старта алгоритма с самого правого края допустимых значений? Проверял на куче разных произвольных значений, заменяя правую границу на v/2 + 1 (+1 нужен на случай ввода 1 или 3), всё отлично работает. Чего я не понимаю?
0
|
||
| 19.04.2017, 17:00 | ||
Но методом прямого расчета было выяснено, что для максимального входного треугольного числа его номер не превышает uint Отсюда и стартовый диапазон. Другими словами, чтобы остаться в рамках убогих целочисленных типов С++ без привлечения библиотек длинной арифметики.
0
|
||
|
0 / 0 / 0
Регистрация: 19.04.2017
Сообщений: 2
|
||
| 19.04.2017, 22:11 | ||
|
0
|
||
| 19.04.2017, 23:14 | |
|
Vorthys, будете интересоваться, прикладывать усилия, решать задачи разного уровня - и все придет.
0
|
|
| 19.04.2017, 23:14 | |
|
2. Дана целочисленная последовательность. Определить количество вхождений каждого числа в последовательность Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
|
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного.
1. Почему показания термометра заряжены целью?
Цель заложена в самом. . .
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
По ссылке 403. Не очень информативно такую ссылку постить.
Запись от Usaga размещена Сегодня в 06:46 . . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|