Библиотека задач по C++ | тесты, код, задания
5.25K subscribers
567 photos
1 video
155 links
Задачи и тесты по C++ для тренировки и обучения.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/7a480301

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Задача Перемещение нулей

🔍 Условие
• Необходимо перенести все нули в конец массива, не меняя порядок следования ненулевых элементов
• Сделать всё надо in-place (на том же самом массиве)

📚 Подход к решению
• Воспользоваться методом двух указателей. Когда один указывает на предыдущий элемент, а другой на следующий. Если предыдущий нулевой, то менять со следующим

#middle #algorithms #tasks

💡Решение
class Solution {
public:
void moveZeroes(vector& nums) {
for (size_t i = 0, j = 0; i < nums.size(); ++i) {
if (nums[i])
swap(nums[i], nums[j++]);
}
}
};
Ханойская башня

• Есть три башни. Цель игры состоит в том, чтобы переместить все диски на третью башню, но вы не можете поместить диск большего размера на диск меньшего размера
• Необходимо создать функцию, которая принимает число дисков в качестве аргумента и возвращает минимальное количество шагов, необходимое для завершения игры

Подсказки

• Можно использовать библиотеку <cmath>
• Можно использовать функцию возведения в степень pow

Tower of Hanoi (edabit)

#middle #algorithms #tasks

Решение
#include <cmath>
int towerHanoi(int discs) {
return pow(2, discs) — 1;
}
⚙️ Search in a Binary Search Tree

В задаче требуется реализовать поиск по бинарному дереву

Подход к решению
- Реализуется с помощью рекурсивного алгоритма
- Сначала обходим левое поддерево, а затем правое

#tasks #middle

Решение
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if (!root)
return nullptr;

if (root->val == val)
return root;

if (val < root->val)
return searchBST(root->left, val);
else
return searchBST(root->right, val);
}
};
🧿 Задача Простая пара

Дан массив целых чисел arr и целое число n. Найдите из данного массива пару чисел [x, y] такую, что x * y = n. Если пара не найдена, вернуть [0, 0]

👉A Simple Pair (edabit)

#middle #tasks

Решение
std::pair simplePair(std::vector arr, int n) {

for (int i = 0; i < arr.size()-1; ++i) {
for (int j = i+1; j < arr.size(); ++j) {
if (arr[i] * arr[j] == n) {
return std::make_pair(arr[i], arr[j]);
}
}
}

return std::make_pair( 0, 0 );
}
⚙️ Задача How Many Numbers Are Smaller Than the Current Number

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

Пример
Input: nums = [8,1,2,2,3]
Output: [4,0,1,1,3]

Ограничения
- Значение элемента лежит между значениями 0 и 100
- Длина самого массива не меньше 2-х и не больше 500-а

👉How Many Numbers Are Smaller Than the Current Number (leetcode)

#tasks #middle

Решение

class Solution {
public:
vector smallerNumbersThanCurrent(vector& nums) {
vector ans;
vector nums_count(101);

for (const int num : nums){
++nums_count[num];
}

for (int i = 1; i <= 100; ++i) {
nums_count[i] += nums_count[i — 1];
}

for (const int num : nums) {
ans.push_back(num == 0 ? 0 : nums_count[num — 1]);
}

return ans;
}
};
Задача Minimum Number of Operations to Move All Balls to Each Box (leetcode)

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

Пример 1
Input: boxes = «110»
Output: [1,1,3]

Пример 2
Input: boxes = «001011»
Output: [11,8,5,4,3,4]

👉 Ссылка

#tasks #middle

Решение (brute force)
class Solution {
public:
std::vector minOperations(std::string boxes) {
std::vector result;

for (int i = 0; i < boxes.length(); ++i) {
int count = 0;

for (int j = 0; j < boxes.length(); ++j) {
if (boxes[j] == '1') {
count += std::abs(i — j);
}
}
result.push_back(count);
}

return result;
}
};