Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/2345: Рейтинг темы: голосов - 2345, средняя оценка - 4.54
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Задачи для тренировки и лучшего понимания

15.07.2010, 05:53. Показов 529084. Ответов 1272
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят. Кто-нибудь может дать задачу для тренировки? Приблизительно по всему курсу С++. Буду благодарен за сложную задачу, но которую способен сделать новичок-любитель. Затраты сил-времени не важно. Главное, чтобы это было интересно и не слишком рутинно. + Если найдется человек который даст задачу просьба помогать с кодом, который я буду себя скидывать. Не переписывать за меня, но указывать на ошибки и желательно объяснять. Заранее спасибо.

Список задач, решение которых присутствует в данной теме:
44
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2010, 05:53
Ответы с готовыми решениями:

Элементарные программы, для лучшего понимания языка...
Здравствуйте. Вот сегодня решил что пора изучать с++. Есть пару задач. Начал решать и уже на первой запоролся( суть в том чтобы определить...

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

Литература для лучшего понимания сути программирования
Привет! Подскажите литературу, которая поможет разобраться в сути самого процесса программирования, поможет изучить теорию алгоритмов,...

1272
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.07.2010, 08:07
Студворк — интернет-сервис помощи студентам
GаlаX, 3 > 1, значит, нельзя
Можно ложить 1 на 2 и на 3, 2 на 3
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 08:20
Цитата Сообщение от Aye Aye Посмотреть сообщение
Каждое перекладывание должно производиться через средний колышек
то есть в каждом ходе участвует средный колышек?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
28.07.2010, 09:38
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
////////////////////////////////////////////////////////////////////////////////////////////
//Найдите кратчайшую последовательность перекладываний, перемещающих башню из n дисков 
//с левого колышка A на правый колышек C, если прямой обмен дисками между A и C запрещен. 
//(Каждое перекладывание должно производиться через средний колышек B. 
//Больший диск нельзя класть на меньший.)
////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
 
 
typedef std::string  T_str;
 
T_str  get_Hanoi_tower_solution
    (
        int n, 
        char A, 
        char B,
        char C
    )
{    
    if(n == 1)
    {
        return T_str(1, A) + C + ' ';
    }
    else
    {
        return  get_Hanoi_tower_solution(n - 1, A, C, B) 
                + T_str(1, A) + C + ' '
                + get_Hanoi_tower_solution(n - 1, B, A, C);
    }
    
}
 
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите высоту башни: ";
    int n;
    std::cin >> n;
    std::cout << "Решение: "
              << std::endl;
    std::cout << get_Hanoi_tower_solution(n, 'A', 'B', 'C')
              << std::endl;   
    return 0;
}
Добавлено через 13 минут
Вообще-то вот так красивше будет:
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
////////////////////////////////////////////////////////////////////////////////////////////
//Найдите кратчайшую последовательность перекладываний, перемещающих башню из n дисков 
//с левого колышка A на правый колышек C, если прямой обмен дисками между A и C запрещен. 
//(Каждое перекладывание должно производиться через средний колышек B. 
//Больший диск нельзя класть на меньший.)
////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
 
 
typedef std::string  T_str;
 
T_str  get_Hanoi_tower_solution
    (
        int n, 
        char A, 
        char B,
        char C
    )
{    
    if(n == 0)
    {
        return "";
    }
    else
    {
        return  get_Hanoi_tower_solution(n - 1, A, C, B) 
                + T_str(1, A) + C + ' '
                + get_Hanoi_tower_solution(n - 1, B, A, C);
    }
    
}
 
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите высоту башни: ";
    int n;
    std::cin >> n;
    std::cout << "Решение: "
              << std::endl;
    std::cout << get_Hanoi_tower_solution(n, 'A', 'B', 'C')
              << std::endl;   
    return 0;
}
2
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 13:27
Итак. Давайте я пока выложу
Mr.X, это всё хорошо, но вы перекладыаете "кружки" непосредственно с A на С и с С на А, что запрещенно по условию задачки.
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 13:59
Вот мат. часть задачки.
Цитата Сообщение от Aye Aye Посмотреть сообщение
привести математические обоснования
На данный момент я займусь изложением придуманной теории: как найти мин. количество ходов. Сначала я просто попробовал подсчитать, сколько нужно ходов для разных n. Вот что у меня получилось (n кол. "кружочков", k кол. ходов):
Code
1
2
3
4
n=1, k=2;
n=2, k=8;
n=3, k=26;
n=4, k=80;
По моему этого достаточно что бы заметить что новый k выражается по формуле 3(предыдущий k)+2. А теперь то что я "заметил", надо доказать. Итак. Допусти мы знаем, что для некого кол. "кружочков" n, есть мин. кол. ходов k. Каким оно будет для n+1? Начнем рассуждать. Что бы перенести (n+1)-ый кружочек с палочки А на палочку С, мы должны "преодолеть" палочку В. Для этого, мы должны перенести все остальные кружочки на палочку С, МИНИМАЛЬНЫМ количеством ходов. А оно (по условию) k. Итак, теперь мы знаем, что для n+1 кружочков, мин. кол. ходов для (n+1) кружочков будет k+... (дальше узнаем, чему равны эти "..."). Что мы имеем? Пирамидку из n кружочков на палочке С и (n+1)-ый кружочек на палочке А. Переносим его на палочку В. Теперь кол. мин. ходов для (n+1) кружочков = k+1+... . Далее, мы должны перенести (n+1)-ый кружочек на палочку С, для чего должны сначала освободить ее. Переносим пирамидку из n кружочков на палочку А, МИНИМАЛЬНЫМ кол. ходов. Мы знаем что оно = k. Теперь мин. кол. ходов для (n+1) кружочков = k+1+k... . Теперь, когда палочка С свободна, переносим на нее (n+1)-ный кружочек. Это уже k+1+k+1 ходов. А теперь перенесем пирамидку с А на С, где лежит наш (n+1)-ный кружок. А это уже k+1+k+1+k= 3k+2. А реализовать это рекурсией не сложно. Чем я сейчас и займусь...
0
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
28.07.2010, 14:02
nikkka, да колышек B будет участвовать в каждом ходу.

Mr.X, к сожалению не правильно, nikkka все верно вроде бы.
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 14:04
Aye Aye, а рассуждения хоть правельные? :S
0
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
28.07.2010, 14:12
nikkka, я немного запутался в твоем обосновании )) вроде верно, сама идея по крайней мере верна, совет небольшой: надо написать формулу, а потом писать программу.
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 14:29
Aye Aye, ну знаешь...
это теория. надо ДОКАЗАТЬ что Ваш алгоритм правелен, и что это ЕДИНСТВЕННЫЙ кратчайший путь. Это я и сделал. А саму программу я дописываю. Скоро скину.

Добавлено через 13 минут
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
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
string inverse(string s1)
{
    string s2=s1;
    int i=0;
    int size=0;
    while(s1[i]!='\0')
    {
        size++;
        i++;
    }
    i=0;
    while(s1[i]!='\0')
    {
        s2[i]=s1[size-i-1];
        i++;
    }
    return s2;
}
string theway(int n)
{
    string s1;
    if(n==1) s1="AB BC";
    if(n==2) s1="AB BC AB CB BA BC AB BC";
    if(n>2) s1=theway(n-1)+" AB "+inverse(theway(n-1))+" BC "+theway(n-1);
    return s1;
}
int main()
{
    cout<<theway(3);
    getch();
    return 0;
}
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.07.2010, 14:39  [ТС]
nikkka, Красота! А я так и не додумался как сие сделать.
0
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 14:59
Ещё задач!!!!!...
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
28.07.2010, 15:05
nikkka, порешай тимус
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 15:22
Хохол, извените, что порешать? : O
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
28.07.2010, 15:29
acm.timus.ru
Вот выбрал легкую и прикольную задачу (только не залезай в обсуждение - сразу решение узнаешь)
http://acm.timus.ru/problem.aspx?space=1&num=1082
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 15:36
Хохол, прочитал, но преревод дебильный... задачу понять не смог.

Не по теме:

зачем переводить задачки на англ.????

0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.07.2010, 15:47
nikkka, там в левом верхнем углу можно язык переключить
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 15:49
Nameless One, а, ну да...
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
28.07.2010, 19:15
Цитата Сообщение от nikkka Посмотреть сообщение
Итак. Давайте я пока выложу
Mr.X, это всё хорошо, но вы перекладыаете "кружки" непосредственно с A на С и с С на А, что запрещенно по условию задачки.
А, да, что-то я условия не дочитал. Тогда уж так полаконичнее:
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
////////////////////////////////////////////////////////////////////////////////////////////
//Найдите кратчайшую последовательность перекладываний, перемещающих башню из n дисков 
//с левого колышка A на правый колышек C, если прямой обмен дисками между A и C запрещен. 
//(Каждое перекладывание должно производиться через средний колышек B. 
//Больший диск нельзя класть на меньший.)
////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <algorithm>
////////////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
////////////////////////////////////////////////////////////////////////////////////////////
T_str  get_tower_solution(int n)
{    
    if(n == 0)
    {
        return "";
    }
    else
    {
        T_str  sol_str = get_tower_solution(n - 1);
        T_str  sol_str_rev(sol_str);
        std::reverse_copy(sol_str.begin(), sol_str.end(), sol_str_rev.begin());
        return  sol_str + " AB " + sol_str_rev + " BC " + sol_str;                
    }    
}
////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите высоту башни: ";
    int n;
    std::cin >> n;
    std::cout << "Решение: "
              << std::endl;
    std::cout << get_tower_solution(n)
              << std::endl;   
    return 0;
}
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
28.07.2010, 20:37
Mr.X, есть функция котороя инверсирует строку?????
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
28.07.2010, 21:18
nikkka, это глобальный вопрос? или по конкретной задаче?
Для реверса строки есть функция strrev
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.07.2010, 21:18

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

Проверить на правильность и закомментировать весь код для лучшего понимания
Всем здравствуйте. Условие задачи - Заданная матрица целых чисел размером (N, N). Найти среднее арифметическое элементов в окрашенной...

Нужны задачи для тренировки
Киньте задачки на классы......а то в самоучителе, по которому я учу Сишку....приведены задачки, касающиеся только математики.....сами...

Нужны задачи для тренировки
Здравствуйте киньте пожалуйста задания по с++ для человека начинающего изучать Turbo с++

Нужны задачи для тренировки
Вот не давно был школьный этап по программирование в школе(олимпиады). Меня закинули на городскую, вот только писал ту олимпиаду на...


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

Или воспользуйтесь поиском по форуму:
260
Закрытая тема Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru