Fudo
|
Сообщение #61
5 ноября 2011 в 10:21
|
Экстракибер
35 |
Ну, вообще, я, когда решал задачу, решил способом 4б от Sauvage, то есть идем до ближайшего включенного, выключаем, возвращаемся в исходный, и если там выключено, то мы прошли ровно круг. Остальные я прогнал мысленно, вроде, тоже работают. По поводу задачи, которую предложил Sauvage: скрытый текст… точного решения я пока не нашел, хочется спать и плохо соображаю, но не заключается ли алгоритм в том, что нужно в переменную забить значение первого числа, потом вычесть из него значение второго, а далее - если результат будет не больше нуля, то следующее число прибавляем; если больше - вычитаем. Так до тех пор, пока числа не кончатся. Модуль получившегося числа, если я ничего не напутал, должен быть равен искомому. upd: после того, как отправил пост, догадался проверить на той цепочке, которая дана, как пример, ничего не вышло. Возможно, где-то напутал с условиями... ну я хоть близок? :) Последний раз отредактировано 5 ноября 2011 в 11:23 пользователем Fudo
|
Крестоносец
|
Сообщение #62
5 ноября 2011 в 12:00
|
Маньяк
43 |
Фудо, может нужно запоминать максимальное из последовательно считываемых и суммировать или вычитать числа таким образом, чтобы (Результат операции)>=Мах, но при этом (Результат операции) должен быть минимальным. Сейчас обдумаю, как это пояснить понятней (я чисто интуитивно, с помощью логики Фудо), ещё сам не проверил правильность ))) К примеру уже с данными числами: скрытый текст… Числа : 3 + 2 + 9 - 4 + 4 - 2 + 9 - 3 - 4 - 2 + 5 + 9 - 5 - 4 - 3 - 3 - 9 = 2 Рез. оп: 3__5__14_10_14_12_21_18_14_12_17_26_21_17_14_11_2 Правда здесь результат последней операции равен 11, а следующее число равно 9, так что пришлось бы складывать :) блин. Но интуитивно думаю так. Обязательно при каждом считывании определять максимальное число и запоминать его. или так: Rez:=0; Max:=0; Считываем в цикле очередное число n из файла начиная с первого и: If n>Max then Max:=n; If (Rez-n)<Max then Rez:=Rez+n else Rez:=Rez-n; Ну а вот что делать с последним числом надо подумать :) и будет ли работать это с другой последовательностью чисел )))) Нужно попробовать вручную хотя бы со 101-им 9-ти знач. числом ХD Последний раз отредактировано 5 ноября 2011 в 15:00 пользователем Крестоносец
|
-Red_Bull-
|
Сообщение #63
5 ноября 2011 в 13:25
|
Новичок
17 |
Последний раз отредактировано 5 ноября 2011 в 14:42 пользователем -Red_Bull-
|
Sauvage
|
Сообщение #64
5 ноября 2011 в 13:30
|
Гонщик
24 |
Про 1 секунду - это стандартное требование в таких задачах. Предполагается, что можно успеть осуществить порядка нескольких сотен миллионов операций. То есть, например, можно пересчитать 10^8 и иногда даже 10^9 значений, а вот сортировка пузырьком (если бы вдруг требовалась сортировка) не прокатит даже на 10^6 значениях (это порядка 10^12 операций). Но тут вы думаете в направлении, близком к правильному, и в эту секунду точно уложитесь. Fudo, очевидно, что правильное решение не зависит от порядка следования чисел во входном файле. Также я как бы намекаю, что количество использованной памяти не зависит от количества чисел (мог бы в условии и про 10^20 чисел написать, если бы было реально прочитать их за это время). Остаётся вычисление по цепочке, причём на этом вычислении должен действовать переместительный закон. Крестоносец предложил вычисление типа "условное сложение-вычитание", но на таком вычислении переместительный закон не действует (при разном порядке чисел результат разный). Нужно что-то другое, на чём действует переместительный закон. Последний раз отредактировано 5 ноября 2011 в 14:55 пользователем Sauvage
|
Крестоносец
|
Сообщение #65
5 ноября 2011 в 14:04
|
Маньяк
43 |
Да, я уже забил в программке и при другом порядке увидел что это не действует. скрытый текст… учись, учись и ещё раз учись, но программистом мне уже не стать :) Ещё вот мысль: как ни крути но сумма всех "парных" чисел независимо от того чётные они или нет есть число чётное. То есть чётность или нечётность всей последовательности чисел зависит от того какое число "не парное". Может это свойство должно как-то использоваться. фух, я запутался. Может надо при каждой итерации в цикле запоминать количество чётных и кол-во нечётных и... текущее число к примеру чётное, и количество чётных чётно, то его прибавлять к сумме, иначе вычитать. То же самое с нечётными ... нет ерунда получится Товарищи программисты, помогите энергетику Последний раз отредактировано 5 ноября 2011 в 17:10 пользователем Крестоносец
|
Sauvage
|
Сообщение #66
5 ноября 2011 в 15:40
|
Гонщик
24 |
Да, но чётным может быть как сумма пары, так и одно число. "Условное сложение-вычитание" работать не будет - это не коммутативная операция. Подскажу издалека: если взять и сложить все числа (допустим, переполнения не будет), то чётность у суммы будет такой же, как у непарного числа. Последний раз отредактировано 5 ноября 2011 в 17:11 пользователем Sauvage
|
Крестоносец
|
Сообщение #67
5 ноября 2011 в 16:13
|
Маньяк
43 |
Sauvage писал(а): Подскажу издалека: если взять и сложить все числа (допустим, переполнения не будет), то чётность у суммы будет такой же, как у непарного числа. Это я уже додумал (см. мой коммент выше), но что дальше пока не знаю... понятно, что если скажем сложить все числа файла и потом разделить на 2 то мы точно узнаем какое число "не парное" - чётное или нет ))) Последний раз отредактировано 5 ноября 2011 в 17:17 пользователем Крестоносец
|
Sauvage
|
Сообщение #68
5 ноября 2011 в 16:19
|
Гонщик
24 |
Угу. Последний бит результата мы можем узнать. Числа 32-битные. Узнавать надо все биты одновременно, т. к. вход можно прочитать только единожды. Сложение - хорошая операция, коммутативная, но она использует перенос в следующий разряд (бит), а нам это ни к чему.
|
buzzy
|
Сообщение #69
5 ноября 2011 в 16:28
|
Кибергонщик
41 |
Sauvage Мда... После последнего сообщения сразу понятно, как делать. :) Странно, что не подумал об этом раньше. :/
|
Крестоносец
|
Сообщение #70
5 ноября 2011 в 16:30
|
Маньяк
43 |
если сложить логическим "исключающим или" все одноименные биты этих чисел, тогда все биты парных обнулятся и останутся биты искомого числа. Так?
|
Sauvage
|
Сообщение #71
5 ноября 2011 в 16:31
|
Гонщик
24 |
Да. Побитово поксорить все числа. Результат - непарное число.
|
Крестоносец
|
Сообщение #72
5 ноября 2011 в 16:33
|
Маньяк
43 |
эх, мышление у нас "десятичное" ))) *пошёл сжигать старый учебник по Паскалю и следом в магазин за книжкой по Аsm-у :) скрытый текст… помнится старая книжка по оному и деление/умножение на степени двойки при помощи сдвига вправо или влево на соотв. количество бит :/ а тут не мог догадаться Я придумал задачу: имеется число в двоичном виде: 01010101011101101010100101101011010010110010110101011001010100101010101010101010010101001010101010101000100010101010001010 умножьте его на десятичное 33554432 вручную за 1 минуту (можно пользоваться калькулятором с 8 разрядами) ХDDD Кстати, насчёт задачки с шарами предложений нет? :) Последний раз отредактировано 5 ноября 2011 в 17:54 пользователем Крестоносец
|
Sauvage
|
Сообщение #73
5 ноября 2011 в 16:53
|
Гонщик
24 |
Увы, я не физик. Вот ещё задача. Программистская постановка задачи. На вход подаются два натуральных числа. Требуется вывести на экран большее из них. Если числа равны друг другу, то вывести одно из них. Естественно, замечания: - нельзя использовать ветвления, переходы, циклы, подпрограммы, обработчики исключений и т. п., алгоритм должен быть строго линейным; - нельзя использовать манипуляции с битами и машинными представлениями чисел, решение чисто математическое; - можно использовать арифметические операции (в т. ч. обычное деление, целочисленное деление, остаток от деления), округление, корень, квадрат, модуль, логарифм, экспоненту, тригонометрические функции; - можно использовать скобки. Математическая постановка задачи. Определить функцию f(a, b) = max(a, b) как композицию операций из следующего списка: арифметические операции (в т. ч. обычное деление, целочисленное деление, остаток от деления), округление, корень, квадрат, модуль, логарифм, экспонента, тригонометрические функции. Вариант задания для продвинутых - ограничиться только пятью операциями: сложение, вычитание, умножение, целочисленное деление и получение остатка от деления. Последний раз отредактировано 5 ноября 2011 в 17:54 пользователем Sauvage
|
InToTheSorrow
|
Сообщение #74
5 ноября 2011 в 19:17
|
Маньяк
32 |
Крестоносец писал(а): Кстати, насчёт задачки с шарами предложений нет? :) Ну, я решение знаю, но догадался не сам, нам в универе эту задачу объясняли. Так что пусть хомячки сами подумают
|
Крестоносец
|
Сообщение #75
6 ноября 2011 в 14:19
|
Маньяк
43 |
Я тоже не догадался сам, меня мой брат-физик привёл к логическому выводу скрытый текст… Он выигрывал олимпиады по физике в Молдавии (участвовали также ребята из Украины и Румынии) и говорил что у них эта задача была для разминки в свободное время. Ладно, еще одна подсказка (уже почти явно): Здесь примерно то же происходит, как если бы кто-то спустился на несколько метров вниз по лестнице с дирижабля, а на другом дирижабле другой поднялся на несколько метров вверх - подумайте что будет с дирижаблями ))) Последний раз отредактировано 6 ноября 2011 в 15:22 пользователем Крестоносец
|
Sauvage
|
Сообщение #76
6 ноября 2011 в 15:22
|
Гонщик
24 |
Сферический дирижабль в вакууме - это сильно... Дело в вертикальном перемещении, что ли? Последний раз отредактировано 6 ноября 2011 в 16:27 пользователем Sauvage
|
Крестоносец
|
Сообщение #77
6 ноября 2011 в 19:10
|
Маньяк
43 |
Дирижабли обычные, это аналогия. Дело в законе сохранения энергии. Тепло переходит в другие формы энергии :)
|
Sauvage
|
Сообщение #78
6 ноября 2011 в 19:47
|
Гонщик
24 |
Однако, в 49-м посте сказано: Крестоносец писал(а): без обмена энергией в любом виде с другими телами - ни механически, ни электрически ни ещё коим-то образом Видимо, обмен энергиями - только внутри шаров. Но какими её видами... Крестоносец писал(а): Дело в законе сохранения энергии. Ответ об одинаковости температур не противоречит этому закону. Почему он неверный? Последний раз отредактировано 6 ноября 2011 в 20:49 пользователем Sauvage
|
Крестоносец
|
Сообщение #79
7 ноября 2011 в 10:19
|
Маньяк
43 |
Тепло переходит в 2 вида энергии в данной задаче: во внутреннюю и ещё одну (после получения тепла шары не обмениваются энергией ни с чем - изолированы) скрытый текст… прямая подсказка: получив энергию в виде тепла шары нагреваются и расширяются - и далее смотрите внимательно условия задачи Последний раз отредактировано 7 ноября 2011 в 11:30 пользователем Крестоносец
|
Sauvage
|
Сообщение #80
7 ноября 2011 в 11:24
|
Гонщик
24 |
Подвешенный шар опустится, лежащий - поднимется. Как бы получается, что часть энергии переходит в потенциальную. Тогда температура лежащего должна бы быть меньше, т. к. тепло у него пошло на увеличение потенциальной энергии, а у подвешенного - наоборот. Но меня вот что смутило... Потенциальная энергия - вещь двусторонняя. Если взять систему "лежащий шар - Земля", то нагревание шара увеличит потенциальную энергию обоих тел относительно друг друга. То же и с системой "подвешенный шар - Земля". Мы фактически сводим и разводим пару тел, меняя потенциальную энергию их обоих. Но было написано, что нет обмена энергией с другими телами, в т. ч. с Землёй. Как так? Последний раз отредактировано 7 ноября 2011 в 12:26 пользователем Sauvage
|