Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2744, средняя оценка - 4.89
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
#1

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

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

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

Список задач, решение которых присутствует в данной теме:
Лучшие ответы (59)
Сообщение: #857841 Сообщение: #857861 Сообщение: #858352 Сообщение: #859371 Сообщение: #860160 Сообщение: #860255 Сообщение: #860259 Сообщение: #860317 Сообщение: #860368 Сообщение: #860466 Сообщение: #860508 Сообщение: #860720 Сообщение: #861091 Сообщение: #862174 Сообщение: #862617 Сообщение: #867259 Сообщение: #870298 Сообщение: #872053 Сообщение: #876456 Сообщение: #880114 Сообщение: #882889 Сообщение: #884418 Сообщение: #886414 Сообщение: #886989 Сообщение: #887733 Сообщение: #888464 Сообщение: #888487 Сообщение: #888941 Сообщение: #888947 Сообщение: #889040 Сообщение: #889450 Сообщение: #889587 Сообщение: #891772 Сообщение: #891790 Сообщение: #891862 Сообщение: #897758 Сообщение: #897782 Сообщение: #906325 Сообщение: #907991 Сообщение: #943672 Сообщение: #943700 Сообщение: #967735 Сообщение: #1053777 Сообщение: #1054209 Сообщение: #1083853 Сообщение: #1083928 Сообщение: #1131058 Сообщение: #1131359 Сообщение: #1273743 Сообщение: #1275465 Сообщение: #1276743 Сообщение: #1279215 Сообщение: #1282583 Сообщение: #1309088 Сообщение: #1315633 Сообщение: #1366395 Сообщение: #1550164 Сообщение: #1603678 Сообщение: #1604364
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 05:53     Задачи для тренировки и лучшего понимания
Посмотрите здесь:

C++ Какой компилятор выбрать для лучшего изучения С++ по книге Берна Страуструпа?п
C++ Элементарные программы, для лучшего понимания языка...
Нужны задачи для тренировки C++
C++ Киньте задачки для тренировки
C++ Нужны простые задачи для тренировки
Нужны задачи для тренировки C++
На соревнованиях по фигурному катанию оценки заносятся в компьютер. Составить программу для вывода на экран лучшего результата после каждого выступлен C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.01.2011, 18:27  [ТС]     Задачи для тренировки и лучшего понимания #1101
Пробежался на бумажке. Вроде все четко

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
#include <iostream>
#include <fstream>
 
int main()
{
        std::ifstream ifs("input.txt");
        std::ofstream ofs("output.txt");
        std::cin.rdbuf(ifs.rdbuf());
        std::cout.rdbuf(ofs.rdbuf());
        unsigned long long K; 
             int N;
        std::cin>>K>>N;
        unsigned long long res=K;
        for(int i=1; i<N; ++i)
        {
                unsigned long long To_five=K/5;
                unsigned long long To_three=0;
                if(To_five)
                        K-=5*To_five;
                if(K)
                {
                        while(K)
                        {
                                if(K%3 == 0)
                                {
                                        To_three+=K/3;
                                        K%=3;
                                        break;
                                }
                                if(To_five)
                                {
                                        K+=5;
                                        --To_five;
                                }
                        }
                }
                res+=To_three*5+To_five*9;
                K=res;
        }
        std::cout<<res<<'\n';
        return 0;
}
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.01.2011, 18:43     Задачи для тренировки и лучшего понимания #1102
ForEveR, Превышение времени на 5-ом тесте. Сейчас буду разбираться.

Добавлено через 3 минуты
ForEveR, Контрпример: 4 2
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.01.2011, 18:46  [ТС]     Задачи для тренировки и лучшего понимания #1103
valeriikozlov, АГа... Понято. Попробую исправить.
А кстати какой в нем должен быть ответ? Остаток 1 в любом случае будет в первом году
Посчитал на бумаге вышло 24...
Примерно таким макаром.

Смотрим кол-во 5-к - 0.
Смотрим делится ли на 3 без остатка - нет.
Смотрим есть ли 5-и - нет.
Делим на 3 - получаем 1. Итого в первый год изготовили 5 роботов. Итого 9 всего. 4 прошлых + 5 в этом году.

Смотрим кол-во 5-к - 1.
Смотрим делится ли полученный остаток (4) на 3 без остатка - нет.
Смотрим есть ли 5-и - да.
Прибавляем 5-у к кол-ву роботов - 9.
Уменьшаем кол-во пятерок - 0.
Смотрим делится ли на 3 - да.
9/3=3.
3*5.
9+15=24.

В расчетах мог ошибиться, но идея верна?
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.01.2011, 18:53     Задачи для тренировки и лучшего понимания #1104
ForEveR, Здесь вариант такой (чтобы максимальное кол-во получилось): одна тройка которая даст 5 новых. И в начале второго года всего будет 9.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.01.2011, 18:57  [ТС]     Задачи для тренировки и лучшего понимания #1105
Считал для трех лет.. Для двух будет 9 по идее. Верно?

Добавлено через 45 секунд
Ясно. Вот код. ПРоверьте)

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
#include <iostream>
#include <fstream>
 
int main()
{
        std::ifstream ifs("input.txt");
        std::ofstream ofs("output.txt");
        std::cin.rdbuf(ifs.rdbuf());
        std::cout.rdbuf(ofs.rdbuf());
        unsigned long long K; 
             int N;
        std::cin>>K>>N;
        unsigned long long res=K;
        for(int i=1; i<N; ++i)
        {
                unsigned long long To_five=K/5;
                unsigned long long To_three=0;
                if(To_five)
                        K-=5*To_five;
                if(K)
                {
                        while(K)
                        {
                                if(K%3 == 0)
                                {
                                        To_three+=K/3;
                                        K%=3;
                                        break;
                                }
                                if(To_five)
                                {
                                        K+=5;
                                        --To_five;
                                }
                                else
                                {
                                    To_three+=K/3;
                                    break;
                                }
                        }
                }
                res+=To_three*5+To_five*9;
                K=res;
        }
        std::cout<<res<<'\n';
        return 0;
}
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.01.2011, 19:11     Задачи для тренировки и лучшего понимания #1106
ForEveR, неправильный ответ на 6-ом тесте, сейчас еще посмотрю.

Добавлено через 6 минут
ForEveR, Я только сейчас заметил: У Вас в коде вообще не учтено -
каждый робот живет ровно три года после сборки.
Тут мне кажется без массива или вектора не обойтись.

Добавлено через 19 секунд
ForEveR, Я только сейчас заметил: У Вас в коде вообще не учтено -
каждый робот живет ровно три года после сборки.
Тут мне кажется без массива или вектора не обойтись.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.01.2011, 19:36  [ТС]     Задачи для тренировки и лучшего понимания #1107
valeriikozlov, Оу фак. А ведь и правда. Я это условие как-то тоже не заметил...

Добавлено через 22 минуты
Хм... А так?

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
#include <iostream>
#include <fstream>
#include <vector>
 
int main()
{
        std::vector<unsigned long long> vec;
        std::ifstream ifs("input.txt");
        std::ofstream ofs("output.txt");
        std::cin.rdbuf(ifs.rdbuf());
        std::cout.rdbuf(ofs.rdbuf());
        unsigned long long K; 
        int N;
        std::cin>>K>>N;
        unsigned long long res=K;
        vec.push_back(res);
        for(int i=1; i<N; ++i)
        {
                unsigned long long To_five=K/5;
                unsigned long long To_three=0;
                if(To_five)
                        K-=5*To_five;
                if(K)
                {
                        while(K)
                        {
                                if(K%3 == 0)
                                {
                                        To_three+=K/3;
                                        K%=3;
                                        break;
                                }
                                if(To_five)
                                {
                                        K+=5;
                                        --To_five;
                                }
                                else
                                {
                                    To_three+=K/3;
                                    break;
                                }
                        }
                }
                vec.push_back(To_three*5 + To_five* 9);
                res+=To_three*5+To_five*9;
                if(i >= 3)
                    res-=vec[i-3];
                K=res;
        }
        std::cout<<res<<'\n';
        return 0;
}
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.01.2011, 19:41     Задачи для тренировки и лучшего понимания #1108
ForEveR, Все тесты Ваш код прошел.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.01.2011, 21:10  [ТС]     Задачи для тренировки и лучшего понимания #1109
Вопрос
valeriikozlov, По поводу задачи с планетами... Посидел - подумал.. На бумажке порисовал... Все вцелом понятно как делать (не факт, что в 5 секунд), но не могу вспомнить алгоритм для поиска путей в НЕ взвешенном графе... Название не подкините? Вроде бы поиск в ширину может подойти, но я не уверен
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.01.2011, 21:30     Задачи для тренировки и лучшего понимания #1110
ForEveR, Не помню название. Если имеете ввиду алгоритм для поиска всех путей, то по моему подойдет поиск в глубину. Но по опыту скажу, если искать все пути в графе для этой задачи, то по времени там не уложитесь.
DarK_Fifti'S
2 / 2 / 0
Регистрация: 16.01.2011
Сообщений: 23
16.01.2011, 22:07     Задачи для тренировки и лучшего понимания #1111
ForEveR, у меня есть задачка, могу изложить? или не до неё сейчас?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.01.2011, 22:10  [ТС]     Задачи для тренировки и лучшего понимания #1112
DarK_Fifti'S, Если не обычная студ. лаба - то пожалуйста. Иначе - лучше в личку или создать отдельную тему на форуме
DarK_Fifti'S
2 / 2 / 0
Регистрация: 16.01.2011
Сообщений: 23
16.01.2011, 22:24     Задачи для тренировки и лучшего понимания #1113
ForEveR, программка, мы её называли "устный счет". Программа последовательно выдает арифметические задачи(типа: а+(-,:,*)b, ) заданного уровня сложности, при получении от пользователя ответа выдает сообщения: "правильно", "не правильно". Количество задач задается заранее пользователем. В конце программы проводится подсчет результатов с учетом времени и количества правильных ответов и выставляется оценка.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.01.2011, 23:34  [ТС]     Задачи для тренировки и лучшего понимания #1114
Полагаю имелось ввиду нечто вроде этого.
Не учтены дробные числа при делении.
Генерация рандомных отрицательных чисел.
Уровня 3, можно развить и под большее.

Но мне лень)

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
 
struct lev
{
    enum level {easy, middle, hard};
    static level inttolvl(int one)
    {
        if(one >= 0 && one < size)
            return level(one);
        else
            throw std::logic_error("There is no such level");
    }
    static int const size=3;
};
 
struct oper
{
    enum operations {add='+', sub='-', div='/', mul='*'};
    static operations chartoop(char one)
    {
        return operations(one);
    }
    static char optochar(operations one)
    {
        return char(one);
    }
};
 
struct minmax
{
    int max, min;
    minmax(int ma, int mi):max(ma), min(mi)
    {
    }
    minmax()
    {
    }
};
 
struct numbers
{
    int first, second;
    numbers(int f, int s):first(f), second(s)
    {
    }
    numbers()
    {
    }
};
 
minmax find_minmax(const lev::level& lvl)
{
    minmax mm;
    switch(lvl)
    {
        case lev::easy:
        {
            mm.max=10;
            mm.min=1;
        }
        break;
        case lev::middle:
        {
            mm.max=100;
            mm.min=10;
        }
        break;
        case lev::hard:
        {
            mm.max=1000;
            mm.min=100;
        }
        break;
    }
    return mm;
}
 
int return_result(const numbers& numbs, const oper::operations& op)
{
    int result=0;
    switch(op)
    {
    case oper::add:
        {
            result=numbs.first+numbs.second;
        }
        break;
    case oper::sub:
        {
            result=numbs.first-numbs.second;
        }
        break;
    case oper::mul:
        {
            result=numbs.first*numbs.second;
        }
        break;
    case oper::div:
        {
            if(numbs.second)
                result=numbs.first/numbs.second;
            else
                result=0;
        }
        break;
    }
    return result;
}
 
int main()
{
    srand(static_cast<unsigned>(time(0)));
    lev::level lvl;
    while(1)
    {
        int level;
        std::cout<<"Enter your level (0 - easy, 1 - middle, 2 - hard)\n";
        std::cin>>level;
        try
        {
            lvl=lev::inttolvl(level);
            break;
        }
        catch(const std::exception& e)
        {
            std::cout<<e.what()<<'\n';
        }
    }
    const std::string opers="+-*/";
    oper::operations op;
    minmax mm=find_minmax(lvl);
    numbers numbs;
    int numb_of_tryes=0;
    std::cout<<"Enter numb of tryes: ";
    std::cin>>numb_of_tryes;
    int good_ans=0, bad_ans=0;
    for(int i=0; i<numb_of_tryes; ++i)
    {
        numbs.first=mm.min+rand()%(mm.max-mm.min);
        numbs.second=mm.min+rand()%(mm.max-mm.min);
        op=oper::chartoop(opers[rand()%opers.size()]);
        int right_ans=return_result(numbs, op);
        int ans=0;
        std::cout<<numbs.first<<oper::optochar(op)<<numbs.second<<" = "<<"?\n";
        std::cin>>ans;
        if(ans == right_ans)
        {
            std::cout<<"Right!\n";
            good_ans++;
        }
        else
        {
            std::cout<<"Wrong\n";
            bad_ans++;
        }
    }
    std::cout<<"Quetions: "<< numb_of_tryes<<". Right answers: "<< good_ans
        <<". Bad answers: "<< bad_ans <<'\n';
    std::cout<<"Your note is: ";
    double procents=good_ans*100.0/numb_of_tryes;
    if(procents < 50)
        std::cout<<"2\n";
    else if(procents >= 50 && procents < 65)
        std::cout<<"3\n";
    else if(procents >= 65 && procents < 90)
        std::cout<<"4\n";
    else if(procents >= 90 && procents <= 100)
        std::cout<<"5\n";
    return 0;
}
DarK_Fifti'S
2 / 2 / 0
Регистрация: 16.01.2011
Сообщений: 23
16.01.2011, 23:44     Задачи для тренировки и лучшего понимания #1115
ForEveR, у тебя Microsoft Visual C++ 6.0?...у меня не компилируется, две ошибки, я своим опытом не могу так сразу найти их
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
16.01.2011, 23:51  [ТС]     Задачи для тренировки и лучшего понимания #1116
DarK_Fifti'S, Нет. У меня Visual Studio 2008, 2010... 2005 еще где-то валяется. Советую компилятор новее)
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.01.2011, 21:35     Задачи для тренировки и лучшего понимания #1117
Свадьба
(Время: 1 сек. Память: 16 Мб Сложность: 32%)

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

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

В первой строке входного файла INPUT.TXT записано целое число N — количество молодых людей, без памяти влюбленных в Горгону (1 < N <= 40). Далее следует N чисел — сумма денег на счету каждого молодого человека. В последней строке записано целое число А — сумма денег на счету Горгоны. Суммы денег на счету — целые неотрицательные числа, не превосходящие 10^9.
Выходные данные

В выходной файл OUTPUT.TXT выведите единственное число — максимальную сумму денег, которой сможет обладать Горгона после своей махинации. Ответ выводите с точностью до шести знаков ровно в формате без мантиссы.
Пример:
INPUT.TXT

2
5 10
5
OUTPUT.TXT
7.500000

Пример:
INPUT.TXT

3
1 3 2
0
OUTPUT.TXT
2.125000
asics
Freelance
Эксперт C++
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
17.01.2011, 22:10     Задачи для тренировки и лучшего понимания #1118
valeriikozlov, Хм, а какой подвох ? Или просто делить каждую суму на два и додавать до общей сумы ?
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.01.2011, 22:16     Задачи для тренировки и лучшего понимания #1119
asics, Нужно таким способом найти максимально возможную сумму. Попробуйте на примерах. Кстати я здесь не вижу например такого примера:
2
2 10
5
Что должно получится?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2011, 22:19     Задачи для тренировки и лучшего понимания
Еще ссылки по теме:

C++ Какая база требуется для понимания C++?
C++ Нужен пример рекурсивной функции для понимания ее назначения и практической пользы
C++ Builder Прошу примеров для понимания INDY
Книги для тренировки/развития котелка и просто убийства времени C++
Дайте задания для тренировки C++

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

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт C++
2842 / 1779 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
17.01.2011, 22:19     Задачи для тренировки и лучшего понимания #1120
valeriikozlov, 6 ?
Yandex
Объявления
17.01.2011, 22:19     Задачи для тренировки и лучшего понимания
Закрытая тема Создать тему
Опции темы

Текущее время: 17:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru