Задать вопрос
  • Как посчитать среднее взвешенное значение для циклического ряда?

    lastuniverse
    @lastuniverse
    polikarpovst, я так понимаю, что вы сами не представляете, как считать среднее значение не для пары цифр а например доя трех или более цифр. Спрошу подругому, для чего это нужно? Опишите, что вы хотите делать с этими цифрами на выходе?
  • Как посчитать среднее взвешенное значение для циклического ряда?

    lastuniverse
    @lastuniverse
    polikarpovst, спрашиваю потому, что в случае как вы выразились циклических чисел вообще не может идти речи о среднем значении. Поэтому для того чтобы понять, что же вы хотите получить на выходе, нужна доп информация)))
  • Как посчитать среднее взвешенное значение для циклического ряда?

    lastuniverse
    @lastuniverse
    polikarpovst, подскажите какие средние значения должны получится для пар:
    5, 15
    5, 16
    И для тройки:
    6, 13, 20
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

    lastuniverse
    @lastuniverse
    Alex Gutter, это хорошо, раз есть база заложенная в раннем детстве, то Вам будет значительно проще усваивать материал алгоритмики.
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

    lastuniverse
    @lastuniverse
    Alex Gutter, мне бабушка с детства подсовывала книги типа Математическая смекалка. Б.А. Кордемского и они мне очень нравились, я часами и днями мог сидеть, и разгадывать эти задачки. Когда в школе началась геометрия, я на первом же уроке, достал учителя на столько что был вызван к доске со словами "раз такой умный - докажи теорему". Доказал 3-я способами) Далее по жизни все что касается математики, геометрии, инженерной графики в институте, логики и программирования шло как помаслу, ввергая учителей и преподавателей в шок. Я это говорю не для того, чтобы похвастаться, просто уверен, что проведя в раннем детстве много времени за решением математических, геометрических задачек и задачь на смекалку выработал в голове умения видеть пути решения. Я абсолютно не представляю, сколько сил и времени надо потратить взрослому человеку, чтобы добиться такого же эффекта, но думаю, что в разы если не на порядки большего, чем ребенку. Поэтому пожелаю Вам удачи, и посоветую не распылятся на много разных областей.
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

    lastuniverse
    @lastuniverse
    EVGENY T., после того как вчера написал свой вариант увидел что автор выложил вариант на java. Был очень удивлен, потому что два разных человека независимо друг от друга и ЯП, в терминах которых привыкли мыслить выбрали абсолютно идентичные подходы к решению задачи. Такое на практике бывает достаточно редко. Поэтому возникла мысль, что задача сама подталкивает к такому решению, и скорее всего именно это решение и желали увидеть авторы задачи. По сути данное решение должно производить неявную сортировку массива, за счет использования его как стэка FIFO. Это вполне укладывается в тип задач, цель которых- развивать алгоритмическое решение. Таким образом, чтобы понять, какого подхода к ее решению от нас ждут, надо только выяснить, эта задача дана автору как алгоритмическая или как математическая.
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

    lastuniverse
    @lastuniverse
    Alex Gutter, Пусть так и будет.

    Есть еще 1 момент. Что в моем что в Вашем варианте, каждый последующий жук увеличивает колличество элементов массива, содержащего свободные участки пространства на единицу. В случае с 4 милиардами жуков js однозначно загнется (начинает тупить на массивах, с количеством элементов больше 1000000), а вот вытянет или нет java не скажу.
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

    lastuniverse
    @lastuniverse
    Alex Gutter, тут интересный момент.

    в примере что вы дали, также округляют слева в большую сторону :
    var left = (first.Value >> 1) + (first.Value & 1);

    данная операция (побитовый сдвиг вправо) эквивалентна делению на 2 с округлением в меньшую сторону:
    first.Value >> 1

    а эта всегда на выходе даст 1 если число нечетное или 0 если четное
    (first.Value & 1)

    то есть если число было например 7 то первая часть даст 3 а вторая 1, в результате левая сторона будет 3+1 = 4

    правая же вычисляется как само число - левая
    var right = first.Value - left--;

    отличие лишь в том, что в вашем примере когда берут число свободных посадочных мест не забирают одно под жука. У вас просто уменьшают лево на 1 left-- при вычислении право.

    При таком подходе действительно получается с точностью донаоборот, лево-меньшая часть, право большая. Вопрос тут лишь в том насколько принципиально получить при X=8, Y=1 – ответ 3,4 а не 4,3.
    На мой взгляд в этой задаче право-лево это всего лишь условность и роли не играют. Но если всеже принципиально, то просто поменяйте в коде округление.
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

    lastuniverse
    @lastuniverse
    Alex Gutter, посмотрел решение что вы дали, используемый в нем подход по сути идентичен тому, к которому пришел я. Отличается лишь в мелких деталях и синтаксических особенностях языка )))

    Так что считаем что подход уже опробирован и утвержден, а значит и решение верное ))))

    PS: немного пояснений.
    от 6.1-6.2 отказался, теперь алгоритм выглядит так:
    1. создаем массив, в котором будем хранить размеры свободных от жуков областей камней (изначально в массиве всего 1 запись равная начальному количеству камней.
    2. для каждого жука делаем:
    2.1 вынимаем из массива первую ячейку (она будет самым большим куском)
    2.2 отнимаем от ее размера 1 (это жук занял 1 камень)
    2.3 делим ее пополам, при этом если пополам не делится, то левую часть будем считать большей а правую меньшей (например 7/5 = 3.5, тоесть левая=4 а правая=3)
    2.4 вставляем в конец массива обе части, при этом потенциально большую (левую) вставляем в первую очередь а потенциально меньшую (правую) во вторую. Это даст нам то, что в первой ячейке массива всегда будет самая большая часть из имеющихся
    2.5 если еще есть жуки возвращаемся на 2.1
    3. дойдя до сюда, получаем ответ (лево и право вычисленные для последнего жука :)
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

    lastuniverse
    @lastuniverse
    Сейчас попробую описать ход мыслей:

    1. если пойти в лоб, то делаем массив размером Х и заполняем его жуками.
    2. не учитываем многовариантность о которой говорил Rsa97 , считая задачу симметричной и соответственно решения (3,4) и (4,3) равнозначными. То есть заполнять будем от середины (условия максимального удаления от края)
    3. таким образом на каждом шаге (жуке) сканируем массив в поиске свободных зон. сканирование начинаем от центра, и выбираем зону, в которой до жуков и краев максимальное расстояние.
    4 расставив всех жуков находим расстояния слева и справа от последнего.

    Данное решение однозначно не то что нам надо, громоздкое, при огромных значения Х и Y работать будет очень долго, памяти жрать много. Улучшаем:
    5. по сути на каждом шаге расстояние делится примерно пополам. при этом имеется закономерность, количество жуков, необходимое для уменьшения всех свободных участков в 2 раза на каждом шаге будет удваиваться. Это позволит вообще не создавать массив камней а подойти к решению аналитически.
    6. пробуем составить алгорим:
    6.1 вычисляем количество жуков, необходимых для сокращения пространства в 2 раза (на первом шаге 1, на втором 2 на третьем 4 и т.д)
    6.2 вычисляем количество шагов, для которых хватает жуков )
    6.3 определяем размерность оставшегося после этих шагов пространства (тут необходимо немного подумать, так как есть нюансы)
    6.4 оставшееся пространство делим пополам, округляем и получаем значения справа и слева.

    Сейчас попробую все это реализовать на js
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

    lastuniverse
    @lastuniverse
    Alex Gutter, я наверно все таки толкнул вас не в том направлении, несмотря на то, что задача имеет схожесть с фракталами, в силу условия она дискретна и имеет сугубо целочисленный характер, поэтому при увеличении Y ошибка будет пропорционально возрастать (в случае если свободное пространство имеет четное количество позиций жук будет занимать позицию близкую к середине но округленную до целого, и с каждым новым шагом эти ошибки будут накладываться)
    Отсюда следует, что рассчитать через фракталы можно лишь приблизительную (оценочную) величину.
    С другой стороны о моей неправоте говорит сам характер задачи (если я правильно понял тэг АЛГОРИТМЫ).

    Я так понимаю решение должно быть алгоритмическим (некий алгоритм и программа его реализующая) ?
  • Какой алгоритм для решения задачи на динамическое программирование про лестницу и монеты?

    lastuniverse
    @lastuniverse
    kolomiec_artiom, а вообще, погуглите такое: "нахождение оптимального пути по графам"
    Можно найти много примеров, в том числе и программных реализаций.

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

    lastuniverse
    @lastuniverse
    kolomiec_artiom, при данной постановке он вообще не имеет выбора и всегда прыгает на 1
  • Какой алгоритм для решения задачи на динамическое программирование про лестницу и монеты?

    lastuniverse
    @lastuniverse
    Очень глупая постановка задачи!

    Просто перепрыгивая столбики с отрицательным количеством монет он наберет максимум.

    По моему в условии должно быть что то про ограничение количества ходов.
  • Почему программа вычисляет только один раз?

    lastuniverse
    @lastuniverse
    У вас, при единичном проходе цикла, вычисляется значение r=120.

    // начальные значения  
    P = 1;
    k = 2;
    f=1;
    i=1
    t=1;
    
    // далее цикл пока i<2*k+1=2*2+1=5
    // таким образом
    f = 1*5! = 1*120=120
    
    // далее цикл пока i<k-1=2-1=1
    // тоесть так как i = 1 вычисления в этом цикле не производятся
    // таким образом
    t=1;
    
    // далее получаем
    r = 120 / 1 = 120 // об этом вам написал  @myjcom.
    
    // ну а далее получаем завершение вычислений если r >= M
    // то есть если вы введете М меньше чем 120 то вы получите всего 1 цикл вычислений.

    Отсюда вопросы:
    1. Что именно вы пытаетесь посчитать?
    2. Какое значение М вы вводите, и почему считаете что при этом значении цикл do должен считаться более одного раза?
  • Почему программа вычисляет только один раз?

    lastuniverse
    @lastuniverse
    А почему вы считаете что она должна вычислять несколько раз?

    Вы даже код выложили с ошибкой (скобка лишняя), вы уверенны что она у вас вообще считает?
  • Как получить дробное число при делении 1 на 1?

    lastuniverse
    @lastuniverse
    Денис Кузнецов, cout умный оператор, ему надо явно задать тип вывода.

    гуглите это:
    std::fixed
    std::cout.precision()
    std::setprecision(10)
  • Как разобрать массив JSON без запятых?

    lastuniverse
    @lastuniverse
    Newmo, как намекнул Алексей Ярков, самым верным способом решить вашу проблему будет именно правка серверной части, отдающей данные.