Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на c++

Name Surname Ученик (16), закрыт 6 дней назад
Хакер Пётр тренируется "на лету" понимать шестнадцатиричный код. Некоторые числа даются ему особенно тяжело, и он называет их злыми. "Злое" число должно содержать не менее трех цифр в шестнадцатиричной записи, шестнадцатиричная запись злого числа должна заканчиваться на 4, а десятичная - содержать не менее одной цифры 8. Помогите Петру удалить из последовательности десятичных чисел злые числа. Входные данные В первой строке вводится n - количество чисел в последовательности. Затем вводится строка из n целых положительных десятичных чисел, каждое из которых не превосходит 220. Числа разделены пробелом. Выходные данные Вывести результирующую последовательность, в которой все злые числа заменены на число 777.

Есть решение на питон:
n = int(input())
data = input().split()
for e in range(len(data)): N
k = data[e]
if '8' in k and int(k) >= 256 and int(k) % 16 == 4:
data[e] = '777'
print(' '.join(data) )

Почти полностью не знаю библиотеки string, stream, vector. Желательно использовать их по минимуму. Если же они все таки использованы, пожалуйста, объясните каждый оператор и сам код. Спасибо
Дополнен 1 неделю назад
Лучший ответ
Шрэк Зелёный Мастер (1532) 1 неделю назад
Конечно, я помогу вам перевести решение на C++. Вот пример кода на C++, который выполняет ту же задачу, что и ваш Python код:


 #include  
#include
#include

int main() {
int n;
std::cin >> n;
std::vector numbers(n);
for (int i = 0; i < n; ++i) {
std::cin >> numbers[i];
}

for (int& num : numbers) {
std::stringstream ss;
ss << std::hex << num; // Конвертируем число в шестнадцатеричную систему
std::string hex_num = ss.str();
if (hex_num.size() >= 3 && hex_num.back() == '4') {
int dec_num = num;
bool contains_8 = false;
while (dec_num > 0) {
if (dec_num % 10 == 8) {
contains_8 = true;
break;
}
dec_num /= 10;
}
if (contains_8) {
num = 777; // Заменяем злое число на 777
}
}
}

for (int num : numbers) {
std::cout << num << ' ';
}
std::cout << std::endl;
return 0;
}

Объяснение кода:
- `#include <iostream>`: Подключает стандартную библиотеку ввода/вывода.
- `#include <vector>`: Подключает библиотеку для использования векторов (динамических массивов).
- `#include <sstream>`: Подключает библиотеку для работы со строковыми потоками.
- `int main() { ... }`: Основная функция программы.
- `std::cin >> n;`: Считывание количества чисел.
- `std::vector<int> numbers(n);`: Создание вектора для хранения чисел.
- `std::cin >> numbers[i];`: Считывание чисел в вектор.
- `std::stringstream ss;`: Создание строкового потока.
- `ss << std::hex << num;`: Запись числа в шестнадцатеричном виде в строковый поток.
- `std::string hex_num = ss.str();`: Получение строки из строкового потока.
- `if (hex_num.size() >= 3 && hex_num.back() == '4') { ... }`: Проверка условий "злого" числа.
- `while (dec_num > 0) { ... }`: Проверка наличия цифры 8 в десятичной записи числа.
- `std::cout << num << ' ';`: Вывод чисел.
- `std::cout << std::endl;`: Вывод перевода строки.
- `return 0;`: Завершение программы с кодом 0.

Этот код использует минимум библиотек и должен быть понятен, если вы знакомы с основами C++. Если у вас есть вопросы по коду, не стесняйтесь спрашивать!
Name SurnameУченик (16) 1 неделю назад
А можно более подробное объяснение строки с проверкой злого числа, что допустим значит .size, .back?
Остальные ответы
resurce Гуру (2890) 1 неделю назад
 #include   // Для ввода и вывода данных 
#include // Для использования контейнера vector
#include // Для работы со строками

// Функция для проверки, является ли число "злым"
bool isEvil(const std::string &decStr) {
// Преобразование строки в десятичное число
int decimal = std::stoi(decStr);

// Преобразование в шестнадцатеричную строку
std::string hexStr;
int temp = decimal;
while (temp > 0) {
int remainder = temp % 16;
if (remainder < 10)
hexStr.insert(hexStr.begin(), '0' + remainder);
else
hexStr.insert(hexStr.begin(), 'A' + (remainder - 10));
temp /= 16;
}

// Проверка на условия "злого" числа
if (hexStr.size() >= 3 && hexStr.back() == '4' && decStr.find('8') != std::string::npos) {
return true;
}
return false;
}

int main() {
int n; // Количество чисел в последовательности
std::cin >> n;

std::vector data(n); // Вектор для хранения десятичных чисел
for (int i = 0; i < n; ++i) {
std::cin >> data[i]; // Чтение ввода
}

for (int i = 0; i < n; ++i) {
if (isEvil(data[i])) {
data[i] = "777"; // Замена "злого" числа на 777
}
}

for (int i = 0; i < n; ++i) {
if (i > 0) {
std::cout << " ";
}
std::cout << data[i];
}
std::cout << std::endl;

return 0;
}
Пояснения в коде, и если не понял, то
Библиотеки:

#include <iostream> — для ввода и вывода данных.

#include <vector> — для работы с контейнером vector.

#include <string> — для работы со строками.

Функция isEvil



bool isEvil(const std::string &decStr) — определяет, является ли число «злым».

int decimal = std::stoi(decStr) — преобразует строку с десятичным числом в целое число.

std::string hexStr — переменная для хранения шестнадцатеричного представления числа.

Цикл while (temp > 0) — преобразует число в шестнадцатеричное представление.

if (hexStr.size() >= 3 && hexStr.back() == '4' && decStr.find('8') != std::string::npos) — проверяет условия «злого» числа.

Основная программа



int n — переменная для хранения количества чисел в последовательности.

std::vector<std::string> data(n) — вектор строк для хранения чисел.

for (int i = 0; i < n; ++i) — цикл для чтения чисел из ввода.

for (int i = 0; i < n; ++i) — цикл для проверки каждого числа на «злость».

std::cout << data[i] — печатает результирующую последовательность.
Андрей ПироговМудрец (15087) 1 неделю назад
это gpt или ты гений c++
Name Surname Ученик (16) Андрей Пирогов, даже если чат гпт, то добиться такого ответа наверняка тяжело
Name SurnameУченик (16) 1 неделю назад
Спасибо ресурс
Name SurnameУченик (16) 1 неделю назад
Ну а хотя да, скорее всего чат гпт.
Похожие вопросы