
C++ Дан массив из n натуральных чисел. Удалить из массива все элементы, которые не являются
однозначными или двухзначными. Затем в двухзначных числах поменять местами цифры, а потом переместить однозначные числа в конец массива. При этом порядок следования чисел в группах (однозначные, двухзначные) не должен изменяться.Никак не могу перенести однозначные числа в конец массива. Буду рад любой помощи.

Ответы на вопрос

#include <iostream>
#include <vector>
using namespace std;
int len(int N){
int cnt = 0;
while(N > 0){
cnt++;
N /= 10;
}
return cnt;
}
void swap_digits(int &N){
string tmp;
while(N > 0){
tmp += N % 10 + '0';
N /= 10;
}
N = stoi(tmp);
}
int main(){
int n;
cin >> n;
vector<int> elems1, elems2;
for(int i = 0; i < n; i++){
int x;
cin >> x;
if(len(x) == 1)
elems1.push_back(x);
else if(len(x) == 2){
swap_digits(x);
elems2.push_back(x);
}
}
for(auto &i : elems1)
elems2.push_back(i);
for(auto &i : elems2)
cout << i << " ";
}



Вы можете выполнить эту задачу в несколько этапов, используя стандартные контейнеры и алгоритмы C++:
Создайте новый массив, в который будут добавляться только однозначные и двузначные числа, а также менять порядок цифр в двузначных числах.
Создайте новый массив для однозначных чисел.
Переберите исходный массив и выполните следующие действия:
- Если текущий элемент - однозначное число, добавьте его в массив однозначных чисел.
- Если текущий элемент - двузначное число, поменяйте порядок цифр и добавьте его в новый массив.
После завершения перебора исходного массива, добавьте элементы из массива однозначных чисел в новый массив.
Вот пример реализации этой логики на C++:
cpp#include <iostream>
#include <vector>
// Функция для перевода двузначных чисел
int reverseTwoDigitNumber(int num) {
return (num % 10) * 10 + (num / 10);
}
int main() {
std::vector<int> originalArray = {12, 3, 45, 67, 8, 91, 24};
std::vector<int> newArray; // Массив для однозначных и двузначных чисел
std::vector<int> oneDigitArray; // Массив для однозначных чисел
for (int num : originalArray) {
if (num >= 1 && num <= 99) {
if (num >= 10) {
// Если число двузначное, меняем порядок цифр
num = reverseTwoDigitNumber(num);
}
newArray.push_back(num);
} else if (num >= 1 && num <= 9) {
oneDigitArray.push_back(num);
}
}
// Добавляем однозначные числа в конец нового массива
newArray.insert(newArray.end(), oneDigitArray.begin(), oneDigitArray.end());
// Вывод результата
for (int num : newArray) {
std::cout << num << " ";
}
return 0;
}
Этот код создает новый массив newArray
, в котором сначала содержатся двузначные числа с поменянным порядком цифр, а затем однозначные числа добавляются в конец массива.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili