LINUX.ORG.RU

Задача «Число операций»

 


0

1

Дано целое неотрицательное число. С ним можно делать следующие операции: увеличивать на 1; уменьшать на 1; делить его на два, если оно четное. Требуется за минимальное число операций получить 0. Вход. Целое неотрицательное число меньше 2000000.

Выход. Минимальное число операций.

http://www.kml.mipt.ru/judge/problems.pl?problem=026

#include <iostream>

using namespace std;

int main() {
    int N, answer = 0;
    cin >> N;
    while(N != 0) {
         if(N%2){
              if( (N+1) % 4){
                   N--;
              }
              else
                  N++;
         }
         else
             N /=2;
         answer++;
    }
    cout << answer << endl;
}

Где ошибка?



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от emulek

4. получается 0 на выходе

Ещё раз, для очень-очень-очень-очень тупых.

Вход. Целое неотрицательное число меньше 2000000.
Выход. Минимальное число операций

Для тебя даже, наверное, лучше так:

ВЫХОД. МИНИМАЛЬНОЕ ЧИСЛО ОПЕРАЦИЙ.

redgremlin ★★★★★
()
Ответ на: комментарий от emulek

А то мне непонятно: глупый я, или таки «способен понять»?

Надуманное противопоставление. Я вовсе не утверждал, что ты настолько туп, что не поймешь, если приложишь некоторые умственные усилия. Видимо желания их прилагать у тебя нет. Или своим постом ты пытался показать превосходство своей толстоты над своей же глупостью? Try harder, пока еще провально.

anonymous
()
Ответ на: комментарий от redgremlin

ВЫХОД. МИНИМАЛЬНОЕ ЧИСЛО ОПЕРАЦИЙ.

ладно, сдаюсь. Не быть мне призёром олимпиады школьников...

emulek
()
Ответ на: комментарий от anonymous

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

нет. А почему просто не объяснить то, что ты хотел объяснить? Для тебя очень важно, что-бы я тоже прошёл твой путь познания мудрости?

emulek
()
Ответ на: комментарий от emulek

что ты хотел объяснить?
в списке операций нет сравнения

Собственно, только это. Ты согласен с этим, кхм, тезисом? А то сначала было просто

есть

потом

А проверка на ноль сама собой очевидна

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

anonymous
()
Ответ на: комментарий от anonymous

Собственно, только это. Ты согласен с этим, кхм, тезисом?

изначально я говорил «в списке операций нет сравнения одного числа с другим числом по модулю 4». Несколько подсократили цитату. Вот с первой страницы мой пост: Задача «Число операций» (комментарий)

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

та я с самого начала утверждал, что для получения алгоритма нужно само число X, и куча операций над ним. И эти операции тоже нужно учитывать. Но тут народ полагает, что учитывать эти операции ненужно, ибо «так в условии школоолимпиады». Я сдался. Затравили (:

emulek
()
Ответ на: комментарий от emulek

Ты вновь поставил меня перед дилеммой классификации: толстячок ли ты, косящий под дурачка, или обратное (опять же не взаимоисключающе, вопрос пропорции, скорее). Есть также исчезающе малая вероятность того, что баранья упрямость и то, что тебе показалось «травлей» (а со стороны выглядело, как закономерная реакция на баранью упрямость) закрыли тебе глаза на очевидный факт. Ты с пеной у рта доказываешь единственность и верность своего понимания условия, но задачу и с такими-то тараканами решаешь неверно. КО: верное решение, например, массив целых [1,2,3,3,4,5,4..], или чуть менее тупое [7,11,15..], может еще что-нибудь, хз. «проверка остатка от деления на 4» вполне реализуема => допустима, хотя, да, на первый взгляд не нужна.

Я просто намекнул на еще более другую трактовку условия, которая, однако, формально верна (кстати, действительно было бы интересно увидеть решение); «сравнения одного числа с другим числом по модулю 4» и «сравнения», да плагиат же, лол. Но тут ты включил двоемыслие (или как там у Оруэлла) и сравнение с нулем сделалось очевидным, а условия школололимпиады остались придуманы врагами. Министерство Правды одобряет!

Я сдался. Затравили (:

Не потакай этим лузерам, твердо стой на своем.

anonymous
()
Ответ на: комментарий от anonymous

«проверка остатка от деления на 4» вполне реализуема => допустима

Ты вновь поставил меня перед дилеммой классификации: толстячок ли ты, косящий под дурачка, или обратное (опять же не взаимоисключающе, вопрос пропорции, скорее)?

я вообще не о том говорил. Но это бесполезно, очевидно. Повторять в десятый раз не буду, ты победил.

emulek
()
Ответ на: комментарий от emulek

я и правда дурачок, и совсем не жирный

хорошо-хорошо, ты убедил.

я вообще не о том говорил

Могу догадаться, что [телепат]говорил ты о цене операции, а не о ее допустимости[/телепат], а

изначально я говорил «в списке операций нет сравнения одного числа с другим числом по модулю 4»
тут всякая ересь про железный вычислитель под который и пишут код трупосоны из вышепотредуноленьискать

конечно же именно о том, но я вообще не о том говорил. Но это бесполезно, очевидно.

anonymous
()
Ответ на: комментарий от emulek

на самом деле я коварный и зеленый хахаха поугадывай-ка еще

посты с содержанием не нужны?

мимо

обоснуй

anonymous
()
Ответ на: комментарий от anonymous

[телепат]говорил ты о цене операции, а не о ее допустимости[/телепат]

мимо

обоснуй

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

Причём этот набор свой, для НЕИЗВЕСТНОГО числа X.

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

А я считаю, что такой подход годен лишь для ИЗВЕСТНОГО числа X. Т.е. если X==15, то допустимая последовательность(C1) 15-16-8-4-2-1-0, которая очевидно лучше, чем(C2) 15-14-7-6-3-2-1-0. Однако, для поиска C1 тоже нужны операции, и если X неизвестно(как у нас), то эти операции тоже надо считать.

Потому-что у нас нет операции «выбрать последовательность операций из таблицы в 200000 последовательностей Ci и их выполнить».

emulek
()
Ответ на: комментарий от emulek

говорил ты о цене операции, а не о ее допустимости
мимо
обоснуй
дело не в самой цене, а в
минимум цены

мда

изначально требовалось найти набор операций, цена которых минимальна

[telepat_back_in_business]«цена которого», наверное[/telepat_back_in_business].

Да понял я, как и все выше, думаю, что ты решил придраться к буквам и твоя Библия^Wинтерпретация самая правильная, именно в этом контексте тебе и отвечал же.

число. С ним можно делать следующие операции:
с ним

(c) условие. Вычислитель тьюринг-полный? Заполнение

таблицы в 200000 последовательностей

с входным числом никаких операций не производит.

Потому-что что-бы

ни пиши-таково, глоза-же режет

anonymous
()
Ответ на: комментарий от anonymous

[telepat_back_in_business]«цена которого», наверное[/telepat_back_in_business].

имелась ввиду не цена набора, а общая цена суммы операций, что одно и тоже.

Да понял я, как и все выше, думаю, что ты решил придраться к буквам и твоя Библия^Wинтерпретация самая правильная, именно в этом контексте тебе и отвечал же.

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

Вычислитель тьюринг-полный?

нет.

Заполнение таблицы в 200000 последовательностей с входным числом никаких операций не производит.

производит. Потому что заполнение строки X невозможно без вычислений над X. Т.е. операции всё равно придётся делать, рано или поздно.

emulek
()
Ответ на: комментарий от emulek

операций становится только больше

только в твоей произвольно выбранной системе подсчета. Примем ее за текущую.

Их становится меньше только после произвольно выбранной границы в середине алгоритма

какого именно алгоритма? Не распарсил.

тьюринг-полный? нет.

сформулируй все-таки, что на нем можно делать, и что из этого нужно считать.

заполнение строки X невозможно без вычислений над X

  • НЕИЗВЕСТНОГО числа X

    на этапе заполнения таблицы Х неизвестен
  • считать можно от единицы же, пусть перебором
  • вручную забивать никто не отменял. Операции в голове/на бумаге тоже считать будешь?

Без спеков вычислителя невозможно, да.

anonymous
()
Ответ на: комментарий от anonymous

Операции в голове/на бумаге тоже считать будешь?

почему нет?

Без спеков вычислителя невозможно, да.

спеки в первом посте.

emulek
()
Ответ на: комментарий от anonymous

методику подсчета озвучь.

есть ВХОД, есть ВЫХОД, всё, что между ними — надо считать. Т.е. если-бы X было известно, то мы могли-бы создать алгоритм по типу 15,16,8,4,2,1,0. Но тут ВХОДА вообще нет у алгоритма, число «15» захардкорено в коде. В самом алгоритме. В нашем случае ВХОД есть, и число там может быть какое угодно (из заданного диапазона).

тьюринг-полный? нет.

noway

что сразу noway? Регулярки тоже неполны, и ничего, работают.

emulek
()
Ответ на: комментарий от emulek

хорошо еще одна попытка

Операции в голове/на бумаге
методику подсчета озвучь.
есть ВХОД, есть ВЫХОД, всё, что между ними — надо считать
всё, что между ними

wow! кто эти всё?

число «15» захардкорено в коде

будто что-то плохое. И 1 и 0 и 200000 и даже аллах - все захардкорено.

Но тут ВХОДА вообще нет у алгоритма

15^W"число там может быть какое угодно (из заданного диапазона)."

спеки в первом посте.
тьюринг-полный? нет.
noway
что сразу noway? Регулярки
Ты вновь поставил меня перед дилеммой классификации: толстячок ли ты, косящий под дурачка, или обратное (опять же не взаимоисключающе, вопрос пропорции, скорее).

для идиотов: как из условия или первого поста ты вывел тьюринг-неполноту вычислителя?

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

anonymous
()
Ответ на: комментарий от anonymous

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

не способен. Закончим на этом.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.