Здесь размещены задания по С++, которые вы можете выполнить. Каждое задание имеет свой уровень сложности. Готовых ответов не будет, поэтому welcome в комментарии!
Easy: Задание №1
Напишите программу, которая запрашивает у пользователя число, а затем выводит список всех делителей этого числа. Делитель — это число, на которое делится делимое. Например, 14
— это делитель 28
, потому что 28 / 14
не имеет остатка.
Medium: Задание №2
Напишите программу, которая спрашивает у пользователя, сколько чисел Фибоначчи нужно сгенерировать, а затем генерирует их.
Hard: Задание №3
Игра «Быки и коровы». Правила:
программа генерирует случайным образом 4-значное число;
пользователю предлагают угадать сгенерированное программой число;
за каждую угаданную пользователем цифру, стоящую на правильной позиции, он получает «корову»;
за каждую угаданную пользователем цифру, стоящую на неправильной позиции, он получает «быка»;
после каждого предположения пользователю должно выводиться количество «коров» и «быков», которые он заработал;
игра окончена тогда, когда пользователь угадал все цифры.
Например, компьютер загадал число 9978
:
Добро пожаловать в игру «Быки и коровы»!
Введите число:
9965
2 коровы, 0 быков
9989
2 коровы, 1 бык
...
Задание №3
Задание №2 (контейнер быстрее рекурсивного алгоритма, так как нет необходимости повторного вычисления значений, особенно актуально для длинных последовательностей Фибоначчи):
Задание №1:
Задание 1:
Задание 2:
Задание 3:
Задание 3
Моё решение задания №3:
Моё решение задания №1:
Задание №3.
Мне понравилась идея сравнивать числа как строки и идея со строкой-стойлом. А по поводу коров покритикую — приходится делать две итерации по цифрам числа, что не очень хорошо. Сначала я тоже их считала в отдельном цикле, но в итоге сделала всё в одном.
Всё в одном цикле? Даже не представляю как это )
Цикл-то в любом случае двойной (по цифрам одного числа и по цифрам второго), просто проходить его один раз, сразу и для быков, и для коров, ерунда.
Задание №2.
a и b — не самые удачные названия для переменных числе Фибоначчи, как и вообще для любых переменных…
Всё верно. Такие переменные допустимы лишь в простых, коротких решениях.
Задание №1.
я не поняла, почему while (div <= num/2)? Само число всегда делится на само себя, а так мы до этого делителя никогда не дойдём…
Действительно. Само число не посчитал делителем.
Вычисление числа фиббоначи во время компиляции. Теперь вы видели все ;))
Вычисление чисел Фибонначи рекурсивной функцией было в 107 уроке, так что все, кто дошёл до сюда, это уже видели. А Ваш код не соответствует условию задания, так как вычисляет только 10ое число, а по заданию нужно генерить количество чисел, которое указал пользователь.
Вообще то, это не тупое вычисление в рантайме, а вычисление в компайл тайме. Между ними колоссальная разница, если Вы не заметили.
Ой, да ладно. То, что Вы запихнули это затёртое решение в шаблоны не сильно прибавило ему в оригинальности.
Я, пожалуй, погорячилась. Вы правы, разница между вычислением в рантайме и при компиляции существенная. Но не уверена, что вычисление происходит именно при компиляции. Как бы это проверить?
fib<10>(); — такой функции нету в коде. Значит, она должна быть сгенерирована. Очевидно, что она сгенерируется на шаблонах в момент компиляции, потому что в рантайме никакой генерации кода не происходит.
А сама функция fib<n> в теле содержит лишь 1 инструкцию: return value, которое свернется оптимизатором в момент компиляции, тем самым, само значение будет вычисление до запуска программы, т.е. в компайл тайме.
Задание №3:
Забыл удалить стейтмент
он вставлялся в код для тестирования
Программа работает не корректно.
Пример: загадано число 6068.
Результат для числа 5678: 1 корова, 2 быка
Результат для числа 6111: 1 корова, 1 бык
Задание №1:
Задача 2.
Задача 1.