С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Теория и практика программирования
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.53/392: Рейтинг темы: голосов - 392, средняя оценка - 4.53
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
1

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

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

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

Начну пожалуй с задачи, которая уже встречалась на этом форуме и стала уже классической:
#0. Поменять значения двух целочисленных переменных одного типа, не используя дополнительной переменной.
#1 Написать самую короткую программу без операторов ввода и операторов работы с файлами, которая в точности выводит на экран (или на печать) свой собственный текст (исходный код).
#2 Вводятся три числа A, B и C. Нужно распечатать их по убыванию. В программе использовать только один оператор switch и ничего больше.
первая взята с форума, вторая здесь, третья моя, недавно родилась, позабавил друзей.
11
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2009, 21:49
Ответы с готовыми решениями:

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

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

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

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

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

132
Evg
Эксперт CАвтор FAQ
19361 / 7210 / 538
Регистрация: 30.03.2009
Сообщений: 20,161
Записей в блоге: 30
18.06.2009, 22:14 21
Ты ещё вот так напиши: "4 * 6 // 1 5" и скажи, что за двумя слэшами камменты идут
4
CheshireCat
Эксперт С++
2913 / 1262 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
18.06.2009, 22:21 22
Ну, если на Си(++), то так и есть.
Надо подумать, имеет ли право на жизнь и такое решение..... Ибо оно также не противоречит условию задачи - если запись реализуется на языке программирования; а в условии нигде не сказано, что два знака деления не могут идти подряд, образуя комментарий в Си-стиле. Тогда на Си есть и альтернативный вариант с /* */.
0
Sagara
19 / 19 / 4
Регистрация: 30.04.2009
Сообщений: 142
18.06.2009, 22:42 23
и расставить между ними знаки операций (плюс, минус, умножить, делить) и скобки (если они нужны)
Про возведение в степень тут вроде ничего не сказано
0
Evg
Эксперт CАвтор FAQ
19361 / 7210 / 538
Регистрация: 30.03.2009
Сообщений: 20,161
Записей в блоге: 30
18.06.2009, 22:48 24
Цитата Сообщение от Sagara Посмотреть сообщение
Про возведение в степень тут вроде ничего не сказано
Он просто издевается, не поддавайся на провокации
1
Humanitis
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
19.06.2009, 10:02 25
Решение
6/(5/4-1)
4/(1-5/6)

Evg,за задачу и правда спасибо
6
Evg
Эксперт CАвтор FAQ
19361 / 7210 / 538
Регистрация: 30.03.2009
Сообщений: 20,161
Записей в блоге: 30
19.06.2009, 10:04 26
А вот это уже правильно
0
Monte-Cristo
2796 / 1384 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
19.06.2009, 12:02 27
Humanitis, целый час просидел..так и не решил... уже начал думать что развод!)
респект тебе!
0
Jazon_deenAlt
4111 / 987 / 191
Регистрация: 09.04.2009
Сообщений: 4,226
19.06.2009, 12:28 28
Evg, блин про цыферки жестокая задача((( заснуть не мог, пока не доперло до меня) спасибо)
0
Ultrator
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
19.06.2009, 15:13 29
Jazon_deenAlt, ну да, да.
(Мне вот ещё другой вариант тогда пришёл сразу, с преобразованием в двоичные векторы с $A и $B первых единиц. В Кнуте же, кроме первого (такой как у всех нас, с модулем) ещё два, совсем других...)
0
CheshireCat
Эксперт С++
2913 / 1262 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
19.06.2009, 21:33 30
Evg,не увиливай от ответа. Мое решение абсолютно правильное и абсолютно соответствует всем требованиям задачи:
1. Даны 4 числа: 1, 4, 5, 6 - выполнено.
2. Нужно их написать в произвольном порядке - выполнено.
3. расставить между ними знаки операций (плюс, минус, умножить, делить) - выполнено.
4. скобки (если они нужны), - выполнено (скобки не нужны).
5. чтобы результат равнялся 24. - выполнено.
6. Каждое число должна быть использована ровно 1 раз. - выполнено.
7. Двузначные числа составлять нельзя. - выполнено.

Укажи конкретно, какому именно требованию противоречит мое решение?
0
Evg
Эксперт CАвтор FAQ
19361 / 7210 / 538
Регистрация: 30.03.2009
Сообщений: 20,161
Записей в блоге: 30
19.06.2009, 21:52 31
CheshireCat, извини, спортить с тобой не хочу. Ибо смысла в этом не вижу, поскольку твоё желание вижу в одном из двух:
1. Ты не смог решить задачу, и теперь занимаешься ерундой
2. Я тебе не нравлюсь и у тебя есть жалание надо мной поиздеваться
0
CheshireCat
Эксперт С++
2913 / 1262 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
19.06.2009, 21:59 32
Спасибо за ответ. Вопрос закрыт.
0
NuM
6 / 6 / 0
Регистрация: 27.06.2009
Сообщений: 16
27.06.2009, 22:56 33
попробуйте решить следующую задачку
есть код на паскале
Pascal
1
2
3
4
5
6
7
8
for i:=1 to 6 do
begin
  case i of
    1,3,5:x:=1;
    2,4,6:x:=128;
  end;
  writeln(x);
end;
нужно представить его в виде
Код:

Pascal
1
2
3
4
for i:=1 to 6 do
begin
  writeln(формула);
end;
где формула - выражение, состоящее из двух операций, так, чтобы результат выполнения был одинаковым.
1
Evg
Эксперт CАвтор FAQ
19361 / 7210 / 538
Регистрация: 30.03.2009
Сообщений: 20,161
Записей в блоге: 30
27.06.2009, 23:49 34
Чтоб в две операции - надо подумать
0
EnzoMatrix
120 / 120 / 14
Регистрация: 14.03.2009
Сообщений: 462
27.06.2009, 23:59 35
Цитата Сообщение от NuM Посмотреть сообщение
где формула - выражение, состоящее из двух операций, так, чтобы результат выполнения был одинаковым
побитовый сдвиг....
128^(младший бит)
^-возведение в степень

Добавлено через 4 минуты 7 секунд
упс, косяк, перепутал в каком случае 128, а в каком 1
вот
остаток от деления в помощь
0
NuM
6 / 6 / 0
Регистрация: 27.06.2009
Сообщений: 16
28.06.2009, 00:08 36
EnzoMatrix, в паскале нет операции возведения в степень
вот операции, которы можно использовать: +, -, *, div, mod, and, or, xor, not, shr, shl
0
Puporev
Модератор
55507 / 42595 / 29444
Регистрация: 18.05.2008
Сообщений: 100,754
28.06.2009, 11:36 37
Вот что-то накарябал.
Pascal
1
2
3
4
5
6
7
8
uses crt;
var i:integer;
begin
clrscr;
for i:=1 to 6 do
writeln((byte(255+i mod 2)div 2)+1);
readln
end.
0
NuM
6 / 6 / 0
Регистрация: 27.06.2009
Сообщений: 16
28.06.2009, 11:52 38
Puporev, в вашем решении используется 4 операции(+, mod, div, +) и byte, а нужно сделать используя только 2 операции из списка в моем предыдущем посте
0
Puporev
Модератор
55507 / 42595 / 29444
Регистрация: 18.05.2008
Сообщений: 100,754
28.06.2009, 11:56 39
Извини, внизу не прочитал.
0
Phantom
Эксперт С++
3174 / 856 / 39
Регистрация: 29.12.2008
Сообщений: 952
28.06.2009, 12:16  [ТС] 40
Puporev, прячьте, пожалуйста, решение под тегом CUT, чтобы ненароком не отбить интерес у тех, кто решает параллельно или будет решать позже.
0
28.06.2009, 12:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2009, 12:16

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru