Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/48: Рейтинг темы: голосов - 48, средняя оценка - 4.77
заставил Бендера
 Аватар для IIIa66uMEM6eP
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,707
Записей в блоге: 6

Алгоритмы. Поиск верного решения задачи.

06.08.2011, 01:53. Показов 11379. Ответов 79
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Крик души. Есть много замечательных книг по программированию, в них часто приводят стандартные алгоритмы. Переработал несколько из них:
Культин_С_С++_в задачах и примерах
Рацеев С.М. Язык Си. Структуры данных и алгоритмы
Седжвик Р. Фундаментальные алгоритмы на C++. (увы не вся.)

Но после прочтения, все равно огромные трудности с алгоритмической частью. Курс программирования дался очень тяжко. Подскажите в каком направлении двигаться, литературу честно говоря читать уже в без толку, когда не могу придумать как найти наибольшую цифру в числе. Конечно можно набрать кучу доп.задач, пробовать решать что то с форума.. Как говорил мой преподаватель: "я в программировании был полный ноль, пока не встретил одну книгу которая и научила программировать" - ведь программирование это не знание языка, а способность находить рациональные решения.
Расскажите, что вам помогло сложить это самое рациональное решение.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2011, 01:53
Ответы с готовыми решениями:

Алгоритмы для решения
Через какие алгоритмы можно реализовать эти две задачи.

Написать программу решения системы тригонометрических уравнений (разветвляющиеся алгоритмы)
Здравствуйте уважаемые форумчане, требуется ваша помощь. Я немного затрудняюсь в написании кода разветвляющихся алгоритмов, очень прошу...

Задачи на циклические алгоритмы
Помогите пожалуйста сделать в с++: 1)Написать функцию, которая по целому a вычисляет и возвращает максимальное n, при котором n! ≤...

79
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
06.08.2011, 12:26
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от diagon Посмотреть сообщение
Он прямо в посте, который вы процитировали =)

Добавлено через 1 минуту

Да ну, там одна проверка всего...
C++
1
#define abs(x) ( (x) < 0 ? -(x) : (x) )
У меня не отображается...
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.08.2011, 12:28
http://acmp.ru/?main=tasks
1
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
06.08.2011, 12:28
Цитата Сообщение от diagon Посмотреть сообщение
Да ну, там одна проверка всего...
C++
1
#define abs(x) ( (x) < 0 ? -(x) : (x) )
Так эта одна проверка для каждой цифры - в результате много проверок (количество итерация), я об этом
0
заставил Бендера
 Аватар для IIIa66uMEM6eP
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,707
Записей в блоге: 6
06.08.2011, 12:29  [ТС]
Цитата Сообщение от Olga_ Посмотреть сообщение
Могу поделиться, куда вам скинуть?
нет, книга вся.. решено далеко не все.
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
06.08.2011, 12:57
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
нет, книга вся.. решено далеко не все.
Тогда ладно, а то в книге 5 частей и физически она разбита на две, в первой 1-4 части, во второй 5 часть

Добавлено через 8 минут
Еще есть неплохая книжка Шень А. Программирование: теоремы и задачи. Она ориентирована на Паскаль, но можно попытаться в С++ попереводить и проанализировать

Добавлено через 18 минут
IIIa66uMEM6eP, а не хотите написать функцию, которая бы возвращала максимальную цифру в восьмеричной записи числа n
0
заставил Бендера
 Аватар для IIIa66uMEM6eP
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,707
Записей в блоге: 6
06.08.2011, 17:07  [ТС]
Цитата Сообщение от Olga_ Посмотреть сообщение
а не хотите написать функцию
попробуем)
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
06.08.2011, 18:32
Сравните потом свой алгоритм с таким:

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
#include <iostream>
#include <cmath>
using namespace std;
 
int Max(unsigned int x)
{
   int max, digit;
   max = x & 7;
   x >>= 3;
   while (x)
   {
       digit = x & 7;
       if (digit > max)
          max = digit;
       x >>= 3;
   }
   return max;
}
 
int main()
{
   int x;
   cout << "x = ";
   cin >> x;
   cout << Max(abs(x)) << endl;
   return 0;
}
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.08.2011, 18:44
Цитата Сообщение от Olga_ Посмотреть сообщение
функцию, которая бы возвращала максимальную цифру в восьмеричной записи числа n
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int max_digit(int n){
    return n ? std::max( max_digit(n / 8), abs(n % 8) ) : 0;
}
int main(){
    int n;
    std::cin >> n;
    std::cout << max_digit(n);
}
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
06.08.2011, 18:53
Цитата Сообщение от diagon Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int max_digit(int n){
    return n ? std::max( max_digit(n / 8), abs(n % 8) ) : 0;
}
int main(){
    int n;
    std::cin >> n;
    std::cout << max_digit(n);
}
/ и % ой как не экономно, не зря же основание 8
Да еще и итеративный алгоритм предпочтительнее рекурсивного
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
06.08.2011, 19:00
Цитата Сообщение от Olga_ Посмотреть сообщение
/ и % ой как не экономно, не зря же основание 8
В принципе верно, но если заглянуть в ассемблерный код, то там запросто можно обнаружить сдвиг вместо деления и and вместо остатка.
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.08.2011, 19:04
Цитата Сообщение от Olga_ Посмотреть сообщение
/ и % ой как не экономно, не зря же основание 8
Да еще и итеративный алгоритм предпочтительнее рекурсивного
Однако мой вариант лучше, ибо красота - страшная сила =)
Ну и надо очень постараться, чтобы подобрать тесты, при которых будет заметна разница.
Могу в свою очередь предложить небольшую задачку: нужно посчитать суммарное количество счастливых билетов с асимптотикой хотя бы O(10^3). Впринципе можно и за O(~140) сделать, но это уже сложнее =)
P.S. счастливый билет - это шестизначное число, сумма левых трех цифр которого равна сумме правых трех цифр.
1
Заблокирован
06.08.2011, 20:14
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
Крик души. Есть много замечательных книг по программированию, в них часто приводят стандартные алгоритмы. Переработал несколько из них:
Культин_С_С++_в задачах и примерах
Рацеев С.М. Язык Си. Структуры данных и алгоритмы
Седжвик Р. Фундаментальные алгоритмы на C++. (увы не вся.)

Но после прочтения, все равно огромные трудности с алгоритмической частью. Курс программирования дался очень тяжко. Подскажите в каком направлении двигаться, литературу честно говоря читать уже в без толку, когда не могу придумать как найти наибольшую цифру в числе. Конечно можно набрать кучу доп.задач, пробовать решать что то с форума.. Как говорил мой преподаватель: "я в программировании был полный ноль, пока не встретил одну книгу которая и научила программировать" - ведь программирование это не знание языка, а способность находить рациональные решения.
Расскажите, что вам помогло сложить это самое рациональное решение.
Я поражаюсь тому, что вы осилили Седжвика. Насколько я знаю, это довольно толстая книга!
Что касается вашей задачи, то ее легко сделать,как говорится, "в лоб".
Но есть более изящное решение, если вас интересуют стандартные алгоритмы. Вам надо написать входной итератор, который возвращает очередную цифру числа. И для этого входного итератора использовать стандартный алгоритм std::max_element.
0
заставил Бендера
 Аватар для IIIa66uMEM6eP
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,707
Записей в блоге: 6
06.08.2011, 20:29  [ТС]
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я поражаюсь тому, что вы осилили Седжвика. Насколько я знаю, это довольно толстая книга!
Что касается вашей задачи, то ее легко сделать,как говорится, "в лоб".
Но есть более изящное решение, если вас интересуют стандартные алгоритмы. Вам надо написать входной итератор, который возвращает очередную цифру числа. И для этого входного итератора использовать стандартный алгоритм std::max_element.
Решение для задачи давно найдено. По сейджевику уже отписывался.
0
Заблокирован
06.08.2011, 20:33
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
Решение для задачи давно найдено. По сейджевику уже отписывался.
Вопрос состоял не в том, чтобы найти решение, так как автор темы сразу же указал, что он сделал эту задачу "в лоб" . А вопрос состоял в том, как связать эту задачу со стандартными алгоритмами.
0
заставил Бендера
 Аватар для IIIa66uMEM6eP
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,707
Записей в блоге: 6
06.08.2011, 20:39  [ТС]
Цитата Сообщение от Сыроежка Посмотреть сообщение
А вопрос состоял в том, как связать эту задачу со стандартными алгоритмами.
вы меня не поняли.. вопрос был как научится алгоритмически мыслить, на что были даны очень хорошие ответы.
0
Заблокирован
06.08.2011, 20:41
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
вы меня не поняли.. вопрос был как научится алгоритмически мыслить, на что были даны очень хорошие ответы.
А чем мой ответ плох?! Я вам подсказал очень оригинальную идею, которая никому в голову даже не пришла! Как раз чтобы алгоритмически мыслить, нужно хорошо знать стандартные алгоритмы.

Я так понимаю, что вы просто не в состоянии оценить мою идею! Значит мало книг вы еще прочитали по С++!
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
06.08.2011, 20:58
Цитата Сообщение от diagon Посмотреть сообщение
Однако мой вариант лучше...
Что за самовлюбленный народ..., каждый третий на этом форуме... аж желания общаться нет и посещать этот форум...
0
Заблокирован
06.08.2011, 21:09
Чтобы вы поняли, насколько я подсказал интересную идею, то написание предложенного мною итератора повзолит вам использовать его в любоых стандартных алгоритмах! Вы можете, например, не только найти максимальную цифру числа, но и минимальную. Вы можете также вывести число в обратном порядке. Вы можете проверить, существует ли в числе конкретная цифра и т.д. То есть перспективы у такого подхода неограничены в отличии от всех тех алгоритмов, которые вам здесь приводили, так как эти алгоритмы решают всего лишь одну задачу, а потому совершенно не гибкие и имеют очень узкое применение!
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.08.2011, 21:42
Цитата Сообщение от Olga_ Посмотреть сообщение
Что за самовлюбленный народ
Что за серьезное отношение к юмору, пусть и плоскому?

Цитата Сообщение от Сыроежка Посмотреть сообщение
То есть перспективы у такого подхода неограничены в отличии от всех тех алгоритмов, которые вам здесь приводили, так как эти алгоритмы решают всего лишь одну задачу, а потому совершенно не гибкие и имеют очень узкое применение!
Быстрее за минуту-другую написать нужную функцию, чем разбираться в документации неизвестного как реализованного алгоритма.
0
Заблокирован
06.08.2011, 21:45
Цитата Сообщение от diagon Посмотреть сообщение
Что за серьезное отношение к юмору, пусть и плоскому?


Быстрее за минуту-другую написать нужную функцию, чем разбираться в документации неизвестного как реализованного алгоритма.
Глупость! Это как раз подход тех, кого нельзя считать программистами. Программирование - это построение абстракций. Как только мало-мальски изменятся условия задачи, вам придется писать очередную " нужную" функцию! А зачем тогда, позвольте вас спросить, разработчики С++ старались и писали стандартные алгоритмы?! Я вам сразу же могу сказать, что с таким мышлением, как у вас, из вас выйдет плохой программист так сказать, "местечковый", который не в состоянии мыслить абстрактно и на каждый "чих" пишет "нужную" функцию!

Представьте к примеру, что условия задачи изменились, и нужно подсчитать сумму цифр числа? Что тогда? Будете писать очередную "нужную" функцию? А если требуется подсчитать число четных цифр в числе? Опять будете писать "Нужную" функцию?!

В моем же случае ничего писать не надо! Все уже написано! Вы можете применить любой алгоритм, который работает со входными итераторами, используя один раз написанный итератор! Повторяю: один раз написанный итератор!Его возможно просто впечатляют!

Вы - тот программист, который вместо того, чтобы, допустим, лжин раз написать реверсивный итератор, постоянно пишет новую функцию для решения задачи, которая делается за минуту с помощью реверсивных итераторв!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2011, 21:45

Инкапсуляция. Поиск верного решения
Добрый вечер! Вот такая программка, почему здесь &quot;d.name&quot; отображается красным и пишется что &quot;String name&quot; private. Ну там я же...

Определить тип задачи и указать возможные алгоритмы решения
В общем, решение задачи НЕ ТРЕБУЕТСЯ, необходимо определить её тип и указать возможные алгоритмы решения к данной задачи. Впервые...

Нет верного решения при определенном значении параметра
Добрый день. Стоит задача получить значения переменной x или лямбда из уравнения и доп. условия при значениях косинуса фи от 0 до 1. ...

Поиск решения задачи в Excel
Помогите решить задачу...буду очень благодарен &quot;Рассчитать, какая сумма окажется на счете, если 40 т. руб. положены на 22 года под 12%...

Поиск архитектурного решения для поставленной задачи
Доброго времени суток всем. Нужен совет - как построить структуру работы приложения для моей текущей задачи. (не пинайте ногами -...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru