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

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

17.06.2009, 21:49. Показов 124759. Ответов 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
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
18.06.2009, 15:11
А можно решение 3-ей (#2) задачи написать? Позабавило
Задача 3 (2#).Вариант решения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int main()
{
    int x,y,z;
    cin>>x>>y>>z;
    switch
          (
            ((x<y)&&(x<z))
            ?
              (((z<y))?13:14)
            :
              (
                ((y<x)&&(y<z))
                ?
                  ((x<z)?15:16)
                :
                  (
                    ((z<x)&&(z<y))
                    ?
                      ((x<y)?17:18)
                    :
                      666 // we can continue here
                  )
              )
          )
    {
        case 13 :
             cout<<y<<endl
                 <<z<<endl
                 <<x<<endl;
        break;
        case 14 :
             cout<<z<<endl
                 <<y<<endl
                 <<x<<endl;
        break;
        case 15 :
             cout<<z<<endl
                 <<x<<endl
                 <<y<<endl;
        break;
        case 16 :
             cout<<x<<endl
                 <<z<<endl
                 <<y<<endl;
        break;
        case 17 :
             cout<<y<<endl
                 <<x<<endl
                 <<z<<endl;
        break;
        case 18 :
             cout<<x<<endl
                 <<y<<endl
                 <<z<<endl;
        break;
        case 666 :
             cout<<"Не убывающая "
                 <<"последовательность.";
    }
    return 0;
}

Таких бы задач побольше(можно тему на видное место),а то всё нудота сплошная
0
Эксперт С++
 Аватар для Phantom
3189 / 869 / 39
Регистрация: 29.12.2008
Сообщений: 951
18.06.2009, 15:56  [ТС]
#0 Ответ дан здесь

#1 Классическая задача, называется куайн/квайн и ей посвещено много статей, самая информативная - в википедии

Ответ на #2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main()
{
    int a,b,c; cin>>a>>b>>c;
 
    switch((a>b)+2*(a>c)+2*(b>c))
    {
    case 0: cout<<c<<b<<a<<endl;break;
    case 1: cout<<c<<a<<b<<endl;break;
    case 2: cout<<b<<c<<a<<endl;break;
    case 3: cout<<a<<c<<b<<endl;break;
    case 4: cout<<b<<a<<c<<endl;break;
    case 5: cout<<a<<b<<c<<endl;break;
    }
    system("pause");
}


#pragma, спасибо, рад что понравилось. Буду и дальше искать подобные задачи, надеюсь остальные тоже поучаствуют
4
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.06.2009, 16:38
Задача не по программированию, но все те, кому её задавал, были очень рады. Задача хороша тем, что легко запоминается и решается в уме

Даны 4 числа: 1, 4, 5, 6
Нужно их написать в произвольном порядке и расставить между ними знаки операций (плюс, минус, умножить, делить) и скобки (если они нужны), чтобы результат равнялся 24. Каждое число должна быть использована ровно 1 раз. Двузначные числа составлять нельзя
Наиболее часто задаваемые вопросы:

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

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

Q: а задача решается?
A: да
4
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.06.2009, 16:57
Задача как раз "по программированию" и на языке С решается элементарно
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.06.2009, 17:01
Цитата Сообщение от CheshireCat Посмотреть сообщение
Задача как раз "по программированию" и на языке С решается элементарно
Задача математическая. А решать её на Си - читерство. Ибо не получишь того удовольствия, которое получил бы, если бы сам её решил. Я вот тоже сам не смог, написал прогу, а потом жалел, что сам как следует мозгами не пораскинул.

Кстати, кто решит - ответ открытым текстом не пишите. дайте людям подумать
1
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
18.06.2009, 17:09
Evg, я уже редактор кода открыл
ладно... попробую головой, сугубо математическим действием.
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
18.06.2009, 17:22
#pragma, А разве ?: это не оператор? Или это операция?

Добавлено через 7 минут 54 секунды
Evg, а деление целочисленное? ))
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.06.2009, 17:30
Цитата Сообщение от Haster Посмотреть сообщение
Evg, а деление целочисленное? ))
В математике нет понятие целочисленное или нецелочисленное, знаковое или беззнаковое, 32-битное или 64-битное, в прямом коде или в дополнительном. В математике есть просто деление
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.06.2009, 17:33
Evg, неужели ты подумал, что я буду писать программу?
Я могу предложить два решения, и оба простые:
1. с записью решения на языке Си (правильно, здесь используется целочисленное деление),
2. "честное математическое" решение.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.06.2009, 17:35
Цитата Сообщение от CheshireCat Посмотреть сообщение
Evg, неужели ты подумал, что я буду писать программу?
Я ничего не думал Просто сразу забыл написать. Да и наверное несколько глупо было математическую задачу давать решать программистам
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.06.2009, 18:22
Ты тогда дай сигнал, когда публиковать решения можно будет......
0
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
18.06.2009, 18:33
Phantom, а в твоём коде
решения
((a>b)+2*(a>c)+2*(b>c))
если сумма равна,например,3,то какие из условий верные?1 и 3 или 1 и2?
0
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
18.06.2009, 18:34
Откройте Кнута, там таких зада-ач...
Вот, одна, помню:
Пусть заданы 3 числовые переменные: A, B, C.
Сделать так, чтобы в C появилось значение, равное min(A, B), при этом, не используя условных переходов.
0
Эксперт С++
 Аватар для Phantom
3189 / 869 / 39
Регистрация: 29.12.2008
Сообщений: 951
18.06.2009, 18:52  [ТС]
#pragma,
всё корректно.
Тройка получится в двух раскладах: (a>b)=1, (a>c)=1, (b>c)=0 или (a>b)=1, (a>c)=0, (b>c)=1. Это значит что либо a>b, a>c и b<c (это случай acb) либо a>b, c>a и b>c (это невозможно). Значит когда тройка, всего один вариант - acb.
1
 Аватар для Jazon_deenAlt
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
18.06.2009, 19:03
Ultrator, ну если условный переход ето типа сравнение то
вот так как бы)
C:=(a+b)/2-|a-(a+b)/2|
а если не так то не так)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.06.2009, 19:44
Цитата Сообщение от CheshireCat Посмотреть сообщение
Ты тогда дай сигнал, когда публиковать решения можно будет......
Да мне то что Кому интересно подумать - тот подумает, кому не интересно - заглянет в ответ.

Добавлено через 3 минуты 4 секунды
ТОлько ответ через CUT спрячь
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.06.2009, 21:53
Ок, вот вариант 1 - на языке С или С++
тут
C++
1
int result = 6 * 4 + 1 / 5;  // разумеется, целочисленное деление...

А вот вариант 2 - "честный математический":
Изображения
 
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.06.2009, 21:55
1. Неправильно, ибо задача математическая
2. Неправильно, ибо задача математическая и про возведение в степень не сказано (это уже работа художника, а не математика)
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.06.2009, 22:12
Правильно, правильно.... Читаем внимательно условия задачи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.06.2009, 22:12
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru