Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/622: Рейтинг темы: голосов - 622, средняя оценка - 4.95
Эксперт С++
 Аватар для Phantom
3189 / 869 / 39
Регистрация: 29.12.2008
Сообщений: 951

Нетривиальные задачи по программированию

17.06.2009, 21:49. Показов 124676. Ответов 132
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наверное каждый из нас сталкивался с нетривиальными задачами (на олимпиадах, в Интернете, подкидывали друзья, может у кого-то родилась своя). Речь идет не о каких-то сложных задачах, а о интересных головоломках, которые решались бы с помощью какого-нибудь нетривиального трюка, требовали соображалки и вызывали бы интерес и улыбку.
Эти задачи не забываются и я предлагаю вспомнить и выложить их здесь. Таким образом, возможно, соберется небольшой "задачник" для уважаемых форумчан. Это будет полезно. Каждый сможет размять мозг и проверить знания, решая такие задачки. В конце концов это просто забавно Чтобы не было флуда и беспорядка, попробую набросать правила топика:
* Задача должна быть действительно оригинальной и интересной, своеобразной головоломкой.
* Автор, который публикует задачу, должен располагать её решением.
* Решение задачи не должно быть слишком большим, а задача - слишком трудоемкой и требующей много времени.
* Допускаются известные и классические задачи.
* Публиковать любые решения в топике только под тегом CUT.

Начну пожалуй с задачи, которая уже встречалась на этом форуме и стала уже классической:
#0. Поменять значения двух целочисленных переменных одного типа, не используя дополнительной переменной.
#1 Написать самую короткую программу без операторов ввода и операторов работы с файлами, которая в точности выводит на экран (или на печать) свой собственный текст (исходный код).
#2 Вводятся три числа A, B и C. Нужно распечатать их по убыванию. В программе использовать только один оператор switch и ничего больше.
первая взята с форума, вторая здесь, третья моя, недавно родилась, позабавил друзей.
12
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2009, 21:49
Ответы с готовыми решениями:

нетривиальные алгоритмы
Подскажите, пожалуйста, примеры нетривиальных алгоритмов. Алгоритмы многие мне известны, но вот термин нетривиальные алгоритмы мне...

задачи по программированию
Задача А. Правильное управление (Online) Задачу добавил: alef Успешно сдано решений: 6 Предыстория Много лет тому вперед в...

Задачи по программированию
Добрый вечер друзья, помогите пожалуйста с задачами по С++: 1)Дана матрица 6х6 целого типа. Создать одномерный массив, содержащий...

132
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,398
Записей в блоге: 6
01.02.2010, 13:52
Студворк — интернет-сервис помощи студентам
Jekidollar, по-моему результат зависит от настроек оптимизатора. Стараюсь таких "запутанных" ситуаций избегать.
Может ошибаюсь.... поправте если так.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
01.02.2010, 13:53
Цитата Сообщение от snake32 Посмотреть сообщение
Jekidollar, по-моему результат зависит от настроек оптимизатора. Стараюсь таких "запутанных" ситуаций избегать.
Результат зависит от конкретного компилятора, ибо разные компиляторы в общем случае дадут разный результат
0
01.02.2010, 13:58

Не по теме:

Подобную задачу давали мне на собеседовании в NIX. В тот раз я не угадал =)

0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
01.02.2010, 14:12
В математике есть деление нацело с остатком и деление действительных чисел. Это две разные операции. Остальных атрибутов деление в математике не имеет.
Увы, в математике есть самые разнообразные объекты - поля и кольца.
И в этих объетах определяются свои операции - лишь бы они удовлетворяли аксиоматике
1
 Аватар для Dimazzzzzz
589 / 96 / 6
Регистрация: 24.01.2009
Сообщений: 379
19.11.2010, 02:45
C++
1
2
3
int i = 5; 
i = ++i + ++i;
i = ?
Цитата Сообщение от snake32 Посмотреть сообщение
Подобную задачу давали мне на собеседовании в NIX
Вставил это в программу - всё равно не пойму результат. Поэтому думаю вопрос в другом: стоит ли писать так? Если мне бы задали такое на собеседовании, я бы сильно удивился вопросу. Думаю, гораздо проще разделить эти операции (хотя в реальности они все равно будут сильно разделены друг от друга), чтобы потом неделями не ползать по всему коду и не искать еле уловимый баг.
А то великий и могучий Си-шный язык может позволить написать многое, только как потом читать такую программу самому программеру. Из "истории" создания языка: Затем Деннис и Брайан разработали по-настоящему извращенный диалект Паскаля, назвав его "A". Когда мы обнаружили, что другие действительно пытаются писать программы на A, мы быстро добавили еще парочку хитрых примочек, создав B, BCPL, и, наконец, Си. Мы остановились, добившись успешной компиляции следующего:
C
1
for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
Добавлено через 15 минут
И еще одна маленькая цитата из вики:
Керниган говорит: «Си — инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво»
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
19.11.2010, 08:27
Цитата Сообщение от Dimazzzzzz Посмотреть сообщение
C++
1
2
3
int i = 5;
i = ++i + ++i;
i = ?
Dimazzzzzz, этот код приводит к undefined behavior - переменная i модифицируется более одного раза не переходя через точку следования. Подробнее здесь.
Поэтому ничего удивительного в этом вопросе нет - либо ты знаешь о точках следованиях, либо нет.
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.12.2010, 07:19
Цитата Сообщение от Phantom Посмотреть сообщение
#1 Написать самую короткую программу без операторов ввода и операторов работы с файлами, которая в точности выводит на экран (или на печать) свой собственный текст (исходный код).
PureBasic
1
10 LIST
0
GenDalF90
23.01.2011, 10:43
На экзамене мне преподаватель озадачил такой задачей: "Даны два заполненных стэка неизвестно чем и каким количеством, еще дан пустой стэк. Нужно с помощью этого буферного стэка и операций Push, Pop и "Пуст ли стэк" (типа условие выхода для стэка. У меня эта процедура реализована с помошью "Stack.Count!=0") поменять местами содержимое заполненных стэков не нарушая порядок и не используя переменные."

Решение я выложил тут... однако правильный ответ по мнению препода "Решения нет!"

 Комментарий модератора 
Ссылка на форум удалена
68 / 66 / 19
Регистрация: 27.12.2008
Сообщений: 212
30.01.2011, 23:54
Evg, я тоже был "рад" твоей задачке с 1,4,5,6. Удалось решить только когда пошел в атаку по следующему принципу:
Принцип решения

раз Evg не постеснялся дать такую задачу, значит решений типа:
a+b+c+d
a*b+c*d
a*b*c+d
(a*b+c)*d
быть не может, а может быть только какой-нибудь заковыристый вариант.
Таких вариантов придумал только два:
(a/b+c)*d = (ad+bcd)/b
и
a/(b+c/d) = (ad)/(bd+c)
более заковырестых выражений просто нет)), т.к. аппликации типа "возведение в степень", видел что не прокатывают))
не знаю почему, но я был уверен, что решение кроется в первом варианте и мусолил его довольно долго. А потом, присмотревшись ко второму понял, что ad очень похоже на 6*4, а нижнее выражение вполне может дать единицу. Подобрать соответствие по формуле совсем не трудно:
В числителе должно быть 6*4, т.е. единицей может быть либо "b", либо "c"
Если с=1, то знаменатель просто не получится сократить => b=1 => c=5


И еще, Sherlok - forever!)

Пополню коллекцию такой задачкой:
На встречу друг другу катятся шарики (13 слева и 17 справа). Расстояние между шариками одинаковое. Столкновение абсолютно упруго и мгновенно (ну без всяких там физических подковырок короче). Нужно посчитать количество всех столкновений до того, как шарики разойдутся (задача имеет эвристическое решение).
1
 Аватар для Козырь
39 / 38 / 6
Регистрация: 11.05.2010
Сообщений: 141
01.09.2012, 09:06
задача про шарики:
hide
Видимо решение задачи, простое умножение кол-ва шариков слева на их кол-во справа. Полноценного доказательства у меня нет, но это работает, когда шариков 1,2,3 на любой из сторон. А когда происходит соударение, ситуация начинает приближаться к более простой.
0
Эксперт С++
 Аватар для Phantom
3189 / 869 / 39
Регистрация: 29.12.2008
Сообщений: 951
08.12.2012, 14:16  [ТС]
Не знаю, понравится или нет, просто в голову пришло:

C++
1
2
3
4
5
6
void main()
{   
    int massiv(3);
                                            // < написать тут один оператор, ...
    std::cout<<massiv[i];       // < чтобы здесь вывелось, например, 31337
}
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
08.12.2012, 14:54
ы?
C
1
int i = ((massiv[0] = 31337) - 31337);
0
Эксперт С++
 Аватар для Phantom
3189 / 869 / 39
Регистрация: 29.12.2008
Сообщений: 951
08.12.2012, 15:33  [ТС]
Evg,
Если честно, под рукой нет любимой студии или другой IDE, но на их месте я бы сказал что-то вроде "subscript requires array or pointer type" Скорее всего - неверно, приду - проверю.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
08.12.2012, 17:55
Блин, я думал там квадратные скобки в описании massiv, а там круглые...
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
08.12.2012, 20:01
Цитата Сообщение от Phantom Посмотреть сообщение
void main()
Даже тут void main...
Типа того?
C++
1
unsigned i[] = {0, 0, 0, 31337};
0
Эксперт С++
 Аватар для Phantom
3189 / 869 / 39
Регистрация: 29.12.2008
Сообщений: 951
08.12.2012, 21:08  [ТС]
Somebody, да, типа того. Всё верно.

Не по теме:

Цитата Сообщение от Somebody Посмотреть сообщение
Даже тут void main...
Да, детишки, не пишите никогда void main. Эта конструкция характеризуется unidentified behavior, теоретически роняет скрипты, вызывающие программу, делает софт непереносимым, противоречит пункту 3.6.2 стандарта и заставляет дядю Бьёрна икать. Для войдмейнщиков уготован специальный котел в аду.

0
 Аватар для ExpressS
5 / 8 / 2
Регистрация: 30.07.2012
Сообщений: 235
15.12.2012, 19:51
Цитата Сообщение от Evg Посмотреть сообщение
Задача не по программированию, но все те, кому её задавал, были очень рады. Задача хороша тем, что легко запоминается и решается в уме



Наиболее часто задаваемые вопросы:

Q: а точно должно получиться 24?
A: да

Q: а в условии задачи нет ошибок?
A: нет

Q: а задача решается?
A: да
скажите ответ
вот что мне пришло на ум
1/5+6*4
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
16.12.2012, 12:38
Цитата Сообщение от ExpressS Посмотреть сообщение
скажите ответ
вот что мне пришло на ум
1/5+6*4
Нетривиальные задачи по программированию
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
18.12.2012, 21:45
А вот так можно:
Кликните здесь для просмотра всего текста
65-41

? ^_^
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.12.2012, 14:00
Цитата Сообщение от korvin_ Посмотреть сообщение
А вот так можно
В задаче написано "даны числа" (а не цифры)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2012, 14:00
Помогаю со студенческими работами здесь

Задачи по программированию в С++
Не могу никак понять программирование на С++ ! Помогите решите мне хоть одну из этих задач я постараюсь понять! П.5.16.Правил ...

Олимпиадные задачи по программированию
Пробуйте :) Окружной этап всероссийской олимпиады школьников по информатике Москва, 2 декабря 2012 Во всех задачах входные...

Олимпиадные задачи по программированию
Здравствуйте, где можно найти задача по программирования и их решение.

Ищу задачи по программированию c++
Надо сборник задач по c++ Чтобы были задачи на циклы, масивы, функции. Желательно с объяснением или решением

Подскажите задачи по программированию
Всем, привет. Начал изучать C++ и qt. А задачи самому себе не придумать. Хоть тресни. Не подкинет ли кто-нибудь интересные задачи. Просто в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru