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

C++

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

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

15.07.2010, 05:53. Просмотров 341423. Ответов 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++ Builder Прошу примеров для понимания INDY
C++ Нужен пример рекурсивной функции для понимания ее назначения и практической пользы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
21.01.2011, 01:17     Задачи для тренировки и лучшего понимания #1141
Данный код,
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
void func(int i) { std::cout << "f(int)"; }
void func(char* ch) { std::cout << "f(char*)"; }
 
int main()
{
    func(0)
    func(NULL);
    return 0;
}
без явного приведения типа, вызовет функцию void func(int i) дважды. Как нетрудно заметить макрос NULL со своей задачей(нулевого указателя) не справился. В грядущем Стандарте будет такая штука как nullptr, которая решит эту проблему. Собственно задание: реализовать нечто подобное nullptr средствами самого C++, чтобы в итоге func(nullptr); всётаки вызвал функцию void func(char* ch)
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.01.2011, 01:42     Задачи для тренировки и лучшего понимания #1142
rangerx,
Посмтори(чесно, код не мой)
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
#include <iostream>
 
void func(int i) { std::cout << "f(int)"; }
void func(char* ch) { std::cout << "f(char*)"; }
 
class NullptrType
{
public:
    template <class X>
    operator X* () const
    {
        return 0;
    }
 
    template <class T, class C>
    operator T C::* () const
    {
        return 0;
    }
 
    static NullptrType const& _the()
    {
        static NullptrType const the;
        return the;
    }
 
private:
    NullptrType()
    {
    }
 
    void operator &();
};
 
namespace
{
    NullptrType const& _nullptr = NullptrType::_the();
}
 
int main()
{
    func(0);
    func(_nullptr);
    return 0;
}
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
21.01.2011, 02:11     Задачи для тренировки и лучшего понимания #1143
Цитата Сообщение от asics Посмотреть сообщение
Посмтори(чесно, код не мой)
А подумать самому? Вообще, приведённый код в принципе правильный(как вариант) за исключением 32 строки.
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
21.01.2011, 15:08     Задачи для тренировки и лучшего понимания #1144
rangerx, а разбор данной задачи будет?
silent_1991
22.01.2011, 13:48
  #1145

Не по теме:

no0ker, разбаловал вас valeriikozlov)))

no0ker
22.01.2011, 14:54
  #1146

Не по теме:

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

rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
22.01.2011, 19:25     Задачи для тренировки и лучшего понимания #1147
Цитата Сообщение от no0ker Посмотреть сообщение
а разбор данной задачи будет?
А что собственно тут разбирать? asics код привёл, там всё довольно просто. Могу немного другой вариант написать разве что...
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
22.01.2011, 19:36     Задачи для тренировки и лучшего понимания #1148
rangerx, ну, в двух словах объяснить почему null не справляется со своей задачей. и в чем основная идея кода asics. может быть ссылку дать по теме. или предложить свой вариант решения проблемы.
хотя, конечно же, можно просто отослать на яндекс.
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
22.01.2011, 21:35     Задачи для тренировки и лучшего понимания #1149
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от no0ker Посмотреть сообщение
ну, в двух словах объяснить почему null не справляется со своей задачей.
Потому что NULL это обычный макрос, в C++ имеющий вид
C++
1
#define NULL 0
Т.е. обычный 0. Между вызовом func(0) и func(NULL) нет никакой разницы.
Цитата Сообщение от no0ker Посмотреть сообщение
и в чем основная идея кода asics
Идея состоит в создании класса с шаблонными операторами преобразования: один для простого указателя, другой для указателя на член класса. Адрес у объекта этого класса(нулевого указателя) брать нельзя поэтому функция operator& помещена в секцию private и оставлена без реализации. Объект данного класса должен иметься только в одном экземпляре, для этого конструктор объявлен в закрытой части класса, а сам объект создаётся с помощью статической функции, которая возвращает константную ссылку на объявленный в ней статический константный объект. Вот собственно и всё. В результате:
1)_nullptr автоматичеки преобразуется в тип указателя, которому его пытаются присвоить;
2) сам объект на который ссылается _nullptr сущетсвует в единственном экземпляре(в виде статической локальной переменной, которую возвращает соответствующая статическая функция), других объектов, за счёт помещённого в секцию private конструктора, создать нельзя;
3) функция взятия адреса у объекта на который ссылкется _nullptr запрещена.
Надеюсь объяснил понятно...
У Майерса в книге "Эффективное использование C++" есть более простая реализация подобного класса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const class
{
    private:
        void operator&() const; // в предыдущем варианте это функция объявлена без const
 
    public:
        template<typename T>
        operator T*() const
        {
            return 0;
        }
 
        template<typename T, typename C>
        operator T C::*() const
        {
            return 0;
        }
}nullptr = {};
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.01.2011, 21:01     Задачи для тренировки и лучшего понимания #1150
Апельсины
(Время: 1 сек. Память: 16 Мб Сложность: 31%)

Катя решила пригласить к себе в гости n друзей. Так как ее друзья очень любят фрукты, то в качестве угощения для них она купила m одинаковых апельсинов.

Она хочет разрезать каждый апельсин на одинаковое число равных долек так, чтобы их можно было распределить между гостями (сама Катя апельсины есть не будет), и всем гостям досталось поровну долек.

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

Входной файл INPUT.TXT содержит два положительных целых числа n и m (1 <= n, m <= 10^9).
Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.
Пример:
INPUT.TXT

2 5
OUTPUT.TXT
2

Пример:
INPUT.TXT

2 4
OUTPUT.TXT
1
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
24.01.2011, 21:19     Задачи для тренировки и лучшего понимания #1151
Если так:
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
#include <iostream>
#include <fstream>
 
typedef long int T_num;
 
T_num NOD(T_num a, T_num b)
{
    while(a > 0 && b > 0)
 
        if(a > b)
            a %= b;
 
        else
            b %= a;
 
    return a + b;
}
 
int main()
{
    T_num n, m;
    std::ifstream ifs("INPUT.TXT");
    std::ofstream ofs("OUTPUT.TXT");
 
    ifs >> n >> m;
    ofs << ( n / NOD(n, m));
    return 0;
}
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.01.2011, 21:35     Задачи для тренировки и лучшего понимания #1152
asics, Все тесты пройдены.

Добавлено через 10 минут
Чувствую задача была очень легкой (даже разбора не требуется), тогда чуть посложнее:
Последняя цифра N!
(Время: 1 сек. Память: 16 Мб Сложность: 39%)

Требуется найти последнюю ненулевую цифру числа N! = 1*2*3*…*N.
Входные данные

Входной файл INPUT.TXT содержит единственное натуральное число N (N<=9999).
Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.
Пример
INPUT.TXT

1
OUTPUT.TXT
1

Пример
INPUT.TXT

5
OUTPUT.TXT
2
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.01.2011, 00:52     Задачи для тренировки и лучшего понимания #1153
Требуется найти последнюю ненулевую цифру числа N! = 1*2*3*…*N.
Входные данные
Входной файл INPUT.TXT содержит единственное натуральное число N (N<=9999).
Выходные данные
В выходной файл OUTPUT.TXT выведите ответ на задачу.
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
#include <fstream>
 
long fact( int n )
{
    return n - 1 ? n*fact(n-1) : 1;
}
 
int main()
{
    std::ifstream inf("INPUT.TXT");
    int N, result;
    inf >> N;
    long n = fact( N );
    if( N > 3 ) 
    {
    while( !( n % 10 ) ) n /= 10;
    result = n % 10;
    }
    else result = n;
    std::ofstream outf("OUTPUT.TXT");
    outf << result;
    inf.close();
    outf.close();
    return 0;
}
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
25.01.2011, 00:57     Задачи для тренировки и лучшего понимания #1154
Maxwe11, Ты в самом деле думаеш, что в long поместиться факториал числа 9999 ? Оо
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.01.2011, 01:05     Задачи для тренировки и лучшего понимания #1155
можно дописать double ))
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
25.01.2011, 01:06     Задачи для тренировки и лучшего понимания #1156
Maxwe11, Ты издиваешся ?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.01.2011, 01:34     Задачи для тренировки и лучшего понимания #1157
к лонгу дописать double получится long double ну или long long

Добавлено через 25 минут
проверил на больших числах long long дает сбои), окончательный вариант)
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
#include <fstream>
 
__int64 fact( int n )
{
    return n - 1 ? n * fact(n - 1) : 1;
}
 
int main()
{
    std::ifstream inf("INPUT.TXT");
    int N, result;
    inf >> N;
    __int64 n = fact( N );
    if( N > 3 ) 
    {
    while( !( n % 10 ) ) n /= 10;
    result = n % 10;
    }
    else result = n;
    std::ofstream outf("OUTPUT.TXT");
    outf << result;
    inf.close();
    outf.close();
    return 0;
}
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
25.01.2011, 02:27  [ТС]     Задачи для тренировки и лучшего понимания #1158
Maxwe11, Не влезет. Тут на длинную арифметику
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
25.01.2011, 05:32     Задачи для тренировки и лучшего понимания #1159
что значит последнюю цифру? то есть ту которая отвечает за единицы? или с другой стороны - которая отвечает за количество стомильонмильярдов?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2011, 06:01     Задачи для тренировки и лучшего понимания
Еще ссылки по теме:
C++ Киньте задачки для тренировки
Дайте задания для тренировки C++
Книги для тренировки/развития котелка и просто убийства времени C++
C++ Какой компилятор выбрать для лучшего изучения С++ по книге Берна Страуструпа?п
На соревнованиях по фигурному катанию оценки заносятся в компьютер. Составить программу для вывода на экран лучшего результата после каждого выступлен C++

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.01.2011, 06:01     Задачи для тренировки и лучшего понимания #1160
no0ker, Для числа 123456789000 - последняя цифра это 0, а последняя ненулевая 9

Добавлено через 40 секунд
Т.е. нам нужно найти как раз последнюю ненулевую

Добавлено через 10 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
Maxwe11, Не влезет. Тут на длинную арифметику
Даю подсказку: я в своем решении длинную арифметику не использовал. Обошелся простым int. Например если N большое, то при его вычислении последние цифры будут нули. И чем дальше, тем этих нулей больше. А на значение последней ненулевой цифры эти нули не окажут влияния.
(Подсказка не полная, я бы сказал на половину).
Yandex
Объявления
25.01.2011, 06:01     Задачи для тренировки и лучшего понимания
Закрытая тема Создать тему
Опции темы

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