В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

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

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

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

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

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

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

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

1272
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.01.2011, 18:27  [ТС]
Студворк — интернет-сервис помощи студентам
Пробежался на бумажке. Вроде все четко

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;
}
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.01.2011, 18:43
ForEveR, Превышение времени на 5-ом тесте. Сейчас буду разбираться.

Добавлено через 3 минуты
ForEveR, Контрпример: 4 2
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.01.2011, 18:46  [ТС]
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.

В расчетах мог ошибиться, но идея верна?
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.01.2011, 18:53
ForEveR, Здесь вариант такой (чтобы максимальное кол-во получилось): одна тройка которая даст 5 новых. И в начале второго года всего будет 9.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.01.2011, 18:57  [ТС]
Считал для трех лет.. Для двух будет 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;
}
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.01.2011, 19:11
ForEveR, неправильный ответ на 6-ом тесте, сейчас еще посмотрю.

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

Добавлено через 19 секунд
ForEveR, Я только сейчас заметил: У Вас в коде вообще не учтено -
каждый робот живет ровно три года после сборки.
Тут мне кажется без массива или вектора не обойтись.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.01.2011, 19:36  [ТС]
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;
}
1
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.01.2011, 19:41
ForEveR, Все тесты Ваш код прошел.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.01.2011, 21:10  [ТС]
Вопрос
valeriikozlov, По поводу задачи с планетами... Посидел - подумал.. На бумажке порисовал... Все вцелом понятно как делать (не факт, что в 5 секунд), но не могу вспомнить алгоритм для поиска путей в НЕ взвешенном графе... Название не подкините? Вроде бы поиск в ширину может подойти, но я не уверен
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
16.01.2011, 21:30
ForEveR, Не помню название. Если имеете ввиду алгоритм для поиска всех путей, то по моему подойдет поиск в глубину. Но по опыту скажу, если искать все пути в графе для этой задачи, то по времени там не уложитесь.
1
 Аватар для DarK_Fifti'S
2 / 2 / 0
Регистрация: 16.01.2011
Сообщений: 23
16.01.2011, 22:07
ForEveR, у меня есть задачка, могу изложить? или не до неё сейчас?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.01.2011, 22:10  [ТС]
DarK_Fifti'S, Если не обычная студ. лаба - то пожалуйста. Иначе - лучше в личку или создать отдельную тему на форуме
0
 Аватар для DarK_Fifti'S
2 / 2 / 0
Регистрация: 16.01.2011
Сообщений: 23
16.01.2011, 22:24
ForEveR, программка, мы её называли "устный счет". Программа последовательно выдает арифметические задачи(типа: а+(-,:,*)b, ) заданного уровня сложности, при получении от пользователя ответа выдает сообщения: "правильно", "не правильно". Количество задач задается заранее пользователем. В конце программы проводится подсчет результатов с учетом времени и количества правильных ответов и выставляется оценка.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.01.2011, 23:34  [ТС]
Полагаю имелось ввиду нечто вроде этого.
Не учтены дробные числа при делении.
Генерация рандомных отрицательных чисел.
Уровня 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;
}
1
 Аватар для DarK_Fifti'S
2 / 2 / 0
Регистрация: 16.01.2011
Сообщений: 23
16.01.2011, 23:44
ForEveR, у тебя Microsoft Visual C++ 6.0?...у меня не компилируется, две ошибки, я своим опытом не могу так сразу найти их
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.01.2011, 23:51  [ТС]
DarK_Fifti'S, Нет. У меня Visual Studio 2008, 2010... 2005 еще где-то валяется. Советую компилятор новее)
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
17.01.2011, 21:35
Свадьба
(Время: 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
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
17.01.2011, 22:10
valeriikozlov, Хм, а какой подвох ? Или просто делить каждую суму на два и додавать до общей сумы ?
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
17.01.2011, 22:16
asics, Нужно таким способом найти максимально возможную сумму. Попробуйте на примерах. Кстати я здесь не вижу например такого примера:
2
2 10
5
Что должно получится?
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
17.01.2011, 22:19
valeriikozlov, 6 ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2011, 22:19

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1120
Закрытая тема Создать тему
Опции темы

Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru