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

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

15.07.2010, 05:53. Показов 501138. Ответов 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
3956 / 1811 / 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
Закрытая тема Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 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