| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Задачка на С не на 5 минут |
| Автор: MGami 2.10.2013, 12:24 | ||
| Добрый день! Друг прислал ссылку с задачей на языке С. Показалось - очень простая. На деле - совсем нет. Условия тут: http://hola.org/jobs_ru.html Дорешал до:
и застрял. Прошу помощи. Если решиам - приз отдам, не в призу уже дело:))) Или сами попробуйте... Модератор: Не забываем пользоваться кнопочкой "код". |
| Автор: feodorv 2.10.2013, 13:05 | ||||
Какой-то развод
или нужно "эффективнее":
|
| Автор: volatile 2.10.2013, 16:43 | ||
60 x $500 = $30,000 Походу, у них перерасход бюджета уже. И кстати, почему только в израиле? Что, в других странах не нашлось программистов способных решить столь сложную задачу? |
| Автор: baldina 2.10.2013, 21:29 |
| они пишут, что решившие не с первого раза по 250 получают, так что с арифметикой в порядке. но денег осталось мало, спешите |
| Автор: bsa 2.10.2013, 22:01 |
| MGami, feodorv, у вас лишние ресурсы тратятся на измерение длины строки. strcpy работает медленней memcpy. А длина строки все равно вычисляется. Более того, можно использовать realloc для выделения памяти. |
| Автор: volatile 2.10.2013, 23:28 |
меммув лучше заюзать, там накладываются строки у них. Добавлено через 3 минуты и 3 секунды да и кто получит хоть 1$ с этой темы, отпишитесь, плиз |
| Автор: bsa 3.10.2013, 00:11 |
| volatile, memmove лучше не использовать. Так как это уже неоптимально - лишняя буферизация. |
| Автор: volatile 3.10.2013, 08:24 | ||
В варианте предложенным feodorv, нет разговора, лучше или хуже. Мы там просто обязаны использовать memmove, потому-что у них в примере есть такой вызов:
нет никокой лишней буферизации, мы уже это http://forum.vingrad.ru/act-ST/f-92/t-341072.html с вами. |
| Автор: MGami 3.10.2013, 09:41 |
| Вот тут прикольные размышления на эту тему и, кстати, о том, кто уже получил бабки:))) http://habrahabr.ru/post/193308/ |
| Автор: akizelokro 3.10.2013, 15:24 | ||||||
| Я вообще не уверен в порядке вычисления в строках, инициализируемых в параметрах (но я не особо лихой программист, если по чесноку). Я что-то всегда считал, что подобная конструкция
может в разных компиляторах исполняться либо как
либо как
Добавлено @ 15:26 Отсюда я бы начал с того, что сигнатура функций должна быть другой. Но если меня подправят знающие люди, то я избавлюсь от одного заблуждения, что уже прогресс |
| Автор: akizelokro 3.10.2013, 16:01 | ||
Спасибо большое! |
| Автор: bsa 9.10.2013, 23:22 | ||
Я бы сделал как-то так:
В str_cpy нельзя использовать realloc, так как он сделает неверным указатель src. |
| Автор: feodorv 12.10.2013, 11:40 | ||||
Ну да, однозначно memmove. Я просто хотел понять, что "идеальнее" с точки зрения hola.org: использовать старую память, если в неё влезает строка (а единственный доступный способ - сравнить длины строк), или лучше каждый раз перезаказывать память
Куда там 7 строк для str_cpy, если делаем банальный strdup.
Можно проверять перекрытие строк Мне почему-то кажется, что str_free проверит аргумент на NULL. И таки str_free(dst)... |
| Автор: bsa 14.10.2013, 09:53 |
| feodorv, проверку перекрытия строк без своего аллокатора не напишешь. А вот у меня нет уверенности, что str_free делает проверку. |