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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
🖥 Курс Эффективное использование С++

📚 Лекция 1. Начнем с основ: библиотеки, утилиты, средства разработки и сборка проектов в С++. Присоединяйтесь, чтобы узнать, как максимально эффективно использовать ресурсы вашего проекта!

🔍 Лекция 2. Глубже в тему работы с памятью: избегаем утечек ресурсов с помощью RAII и умных указателей. Узнаем, как управлять памятью без лишних хлопот

➡️ Лекция 3. Переходим к Move semantics, rvalue reference и perfect forwarding. Открываем новые возможности и улучшаем производительность нашего кода

🔄 Лекция 4. Обсудим callbacks: лямбда-выражения, bind и function. Узнаем, как делать наш код более гибким и модульным

🧵 Лекция 5. Многопоточность в C++. Разбираемся с потоками, блокировками, задачами, атомарными операциями и очередями сообщений

💡 Лекция 6. Обзор возможностей современных стандартов C++. Узнаем, какие новшества есть в мире С++ и как они могут улучшить наш код

👉 Ссылка на курс
🔮 Задача FizzBuzz

Сама по себе задача не сложная для решения, но она очень популярная и поэтому о ней стоит знать

Подход к решению
- Можно решить с помощью операторов ветвления
- Для конвертации int в std::string можно использовать std::to_string(...)

Решение

#include <string>

using namespace std;
string fizzBuzz(int num){
if (num % 3 == 0 and num % 5 == 0) {
return «FizzBuzz»;
} else if (num % 3 == 0) {
return «Fizz»;
} else if (num % 5 == 0) {
return «Buzz»;
} else {
return std::to_string(num);
}
}
🔮 Самые частые суффиксы для алгоритмов

std::*_n — вместо диапазона значений используется количество

std::*_if — предикат вместо значения


std::*_copy — результат копируется в новый структуру данных


👉 Ссылка на список алгоритмов
⚙️ camelCase ⇄ snake_case

Создайте две функции toCamelCase() и toSnakeCase(), каждая из которых принимает одну строку и преобразует ее либо в CamelCase, либо в Snake_case

Подход к решению
- Можно решать с помощью регулярных выражений или посимвольного перебора

👉 camelCase ⇄ snake_case (edabit)

#junior #tasks

💡Решение

std::string toCamelCase(std::string str) {
bool capitalizeNext = false;
std::string camelCaseStr;

for (char c : str) {
if (c == '_') {
capitalizeNext = true;
}
else {
if (capitalizeNext) {
camelCaseStr += toupper(c);
capitalizeNext = false;
}
else {
camelCaseStr += c;
}
}
}

return camelCaseStr;
}

std::string toSnakeCase(std::string str) {
std::ostringstream snakeCaseStr;

for (char c : str) {
if (isupper(c)) {
snakeCaseStr << '_' << static_cast(tolower(c));
}
else {
snakeCaseStr << c;
}
}

return snakeCaseStr.str();
}
⚙️ Задач Excel Sheet Column Title (leetcode)

Есть номер столбца columnsNumber, верните соответствующий заголовок столбца, как он отображается в таблице Excel

Пример

Ввод: columnNumber = 1
Вывод: «A»

Ввод: columnNumber = 28
Вывод: «AB»

👉 Excel Sheet Column Title (leetcode)

#junior #tasks

💡Решение

class Solution {
public:
std::string convertToTitle(int n) {
if (n == 0) return «»;

std::string result;
const std::string map = «ABCDEFGHIJKLMNOPQRSTUVWXYZ»;

while (n != 0) {
result.push_back(map[(n — 1) % 26]);
n = (n — 1) / 26;
}

std::reverse(result.begin(), result.end());

return result;
}
};
⚙️ Найдите нечетное целое число

Напишите функцию, которая принимает массив и находит целое число, которое появляется нечетное количество раз

Подход к решению
- Можно решить с помощью ассоциативного контейнера, просто посчитав количество вхождений
- Также из за того, что нужно найти только одно число то нет необходимости хранить их все, и из-за того, что есть побитовая операция XOR, которая гарантирует, что если дважды применить её к одному и тому же числу, то получится исходное число, можно решить задачу за один проход массива

👉 Find the Odd Integer (edabit)

#junior #tasks

Решение 1
int findOdd(std::vector arr) {
std::map nums;

for (int i = 0; i < arr.size(); ++i) {
nums[arr[i]] += 1;
}

int result = 0;

for (auto num : nums) {
if (num.second % 2 != 0) {
result = num.first;
break;
}
}

return result;
}


Решение 2
int findOdd(std::vector arr) {
int number = 0;
for (auto a : arr) {
number = number ^ a;
}
return number;
}
⚙️ Задача Running Sum of 1d Array

Дан массив чисел. Мы определяем текущую сумму массива как RunningSum[i] = sum(nums[0]…nums[i]). В каждой новой ячейке нового массива будет сумма от 0-го элемента и до i-го

👉 Running Sum of 1d Array

#tasks #junior

💡 Решение
class Solution {
public:
vector runningSum(vector& nums) {
vector ans(nums.size());
ans[0] = nums[0];
for (int i = 1; i < nums.size(); i++)
ans[i] = ans[i-1] + nums[i];
return ans;
}
};
🪬Не забывайте про точку запятой!!!

#memes
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🔮 Задача Sum of v0w3ls

Создайте функцию, которая принимает строку и возвращает сумму гласных, причем для каждой гласной нужно прибавлять своё число (A->4, E->3, I->1, O->0)

👉Sum of v0w3ls (edabit)

#tasks #junior

Решение
int sumOfVowels(std::string str) {
int count = 0;

for (char ch : str) {
ch = std::tolower(ch);
switch (ch) {
case 'a': count += 4; break;
case 'e': count += 3; break;
case 'i': count += 1; break;
case 'o': break;
}
}

return count;
}
⚙️ 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);
}
};
🧨 Что выведется при выполнении программы??
Anonymous Quiz
22%
-127
4%
128
16%
127
56%
Ошибка компиляции
3%
125
🧿 Задача Простая пара

Дан массив целых чисел 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 );
}
Где проблема в данном коде?

Аргумент для sizeof доджен быть *object, потому что в коде подставляется размер указателя а не структуры
⚙️ Задача Even or Odd: Which is Greater?

Создайте функцию, определяющую, больше ли сумма всех чётных цифр, чем сумма всех нечетных цифр в строке цифр

Если сумма нечетных цифр больше суммы четных, верните «Odd is greater than Even»
Если сумма четных цифр больше суммы нечетных, верните «Even is greater than Odd»
Если сумма четных и нечетных цифр равна, верните «Even and Odd are the same»

👉Even or Odd: Which is Greater?

#junior

❗️Решение

std::string evenOrOdd(std::string str) {
int sumOdd = 0;
int sumEven= 0;

for (auto ch : str) {
int num = ch - '0';

if (num % 2 == 0) {
sumEven += num;
}
else {
sumOdd += num;
}
}

if (sumOdd == sumEven) {
return "Even and Odd are the same";
}
else if (sumOdd > sumEven) {
return "Odd is greater than Even";
}
else {
return "Even is greater than Odd";
}
}wbah