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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
🔍 Равенство трех значений

Создайте функцию, которая принимает три целочисленных аргумента (a, b, c) и возвращает количество целых чисел, которые имеют одинаковое значение

📚 Подход к решению
• Предполагается использование условных конструкций (if)

Equality of 3 Values

#junior #algorithms #tasks

💡Решение
int equal(int a, int b, int c) {
int count = 0;

if (a == b || a == c)
count = 2;

if (b == c)
if (count < 2)
count = 2;
else
count = 3;

return count;
}
Перемешивание массива

Задача 1470 Shuffle the Array с leetcode

🔍 Условие
Дан массив nums, состоящий из 2n элементов в виде [x1,x2,...,xn,y1,y2,...,yn].
Нужно вернуть массив в виде [x1,y1,x2,y2,...,xn,yn]

📚 Подход к решению
• Из-за того что элемент x и y лежат друг от друга всегда на одинаковом расстоянии, то можно воспользоваться просто арифметической операцией сложения для поиска пары

#junior #algorithms #tasks

💡Решение
class Solution {
public:
vector shuffle(vector& nums, int n) {
vector result;
for (int i = 0; i < n; ++i) {
result.push_back(nums[i]);
result.push_back(nums[i + n]);
}
return result;
}
};
Поиск дубликатов

Задача 217 Contains Duplicate с leetcode

🔍 Условие
• Учитывая целочисленный массив nums, вернуть true, если хотя бы одно значение появляется как минимум дважды в массиве, и вернуть false, если каждый элемент уникален

📚 Подход к решению
• Из-за того что уникальных элементов меньше или равно исходному размеру входного массива, то можно просто сравнить эти величины

#middle #algorithms #tasks

💡Решение
class Solution {
public:
bool containsDuplicate(vector& nums) {
set testSet(nums.begin(), nums.end());
return testSet.size() < nums.size();
}
};
Задача Перемещение нулей

🔍 Условие
• Необходимо перенести все нули в конец массива, не меняя порядок следования ненулевых элементов
• Сделать всё надо 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;
}
📋 Задача Как найти палиндром

Целое число является палиндромом, если оно читается одинаково как в прямом, так и в обратном направлении. Например, 121 является палиндромом, а 123 — нет

🔍 Условие

• Вернуть true, если x является палиндром и false в противном случае

📚 Подход к решению
• Чтобы понять палиндром это или нет необходимо развернуть число
• Это можно сделать с помощь деления на 10
• При целочисленном делении у нас остаётся число на одну цифру меньше (справа) и в остатке как раз эта цифра
• Цифру из остатка сохраняем
• После того как не осталось цифр в числе собираем новую из остатков (тех цифр которые сохранили

Palindrome Number (leetcode)

#junior #algorithms #tasks

💡Решение

class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) {
return false;
}

long long reversed = 0;
long long temp = x;

while (temp != 0) {
int digit = temp % 10;
reversed = reversed * 10 + digit;
temp /= 10;
}

return (reversed == x);
}
};
📋 Изменение букв

- Создайте функцию, которая изменяет буквы на одну вперед (+1) или назад (-1) в соответствии с массивом

📚 Подход к решению
- Главной целью является познакомиться с ASCII-кодировкой символов

Tweaking Letters (edabit)

#junior #algorithms #tasks

💡Решение
std::string tweakLetters(std::string s, std::vector arr) {
for (size_t i = 0; i < arr.size(); i++)
{
int count = arr[i];

while (count) {
s[i] += count;

if (s[i] < 'a') {
count += 'a' — s[i];
s[i] = 'z';
continue;
}

if (s[i] > 'z') {
count -= s[i] — 'z';
s[i] = 'a';
continue;
}
count = 0;
}
}
return s;
}