Cho mảng số nguyên arr[] và số nguyên x. Nhiệm vụ: sắp xếp lại các phần tử chia hết cho x theo thứ tự tăng dần, giữ nguyên vị trí các phần tử không chia hết cho x.
Các trường hợp đầu vào/đầu ra mẫu
Đầu vào: int arr[] = {4, 24, 3, 5, 7, 22, 12, 10}, x = 2
Đầu ra: Kết quả: 4 10 3 5 7 12 22 24
Giải thích: Các phần tử chia hết cho 2: 4, 24, 22, 12, 10. Sắp xếp tăng: 4, 10, 12, 22, 24. Đặt ngược lại vào vị trí cũ của các bội số 2.
Đầu vào: int arr[] = {4, 24, 3, 5, 7, 22, 12, 10}, x = 3
Đầu ra: Kết quả: 4 3 12 5 7 22 24 10
Giải thích: Bội số của 3: 3, 24, 12. Sắp xếp: 3, 12, 24. Đặt lại vào vị trí cũ.
Phương pháp tiếp cận
- Nhập mảng, size, x. Gọi
Rearrange_Elements(arr, size, x). - Trong hàm:
- Tạo
vectorlưu các phần tử chia hết cho x.vec - Duyệt mảng: nếu
arr[i] % x == 0thìvec.push_back(arr[i]). - Sort
vectăng dần. - Duyệt mảng lần 2: nếu
arr[i] % x == 0thì gánarr[i] = vec[j++]. - In mảng kết quả.
- Tạo
Ví dụ mã C++
#include <bits/stdc++.h>
using namespace std;
void Rearrange_Elements(int arr[], int size, int x) {
vector<int> vec;
int j = 0;
for (int i = 0; i < size; i++) {
if (arr[i] % x == 0) {
vec.push_back(arr[i]);
}
}
sort(vec.begin(), vec.end());
for (int i = 0; i < size; i++) {
if (arr[i] % x == 0) {
arr[i] = vec[j++];
}
}
cout << "Rearrangement of multiples of x " << x << " in increasing order: ";
for (int i = 0; i < size; i++) cout << arr[i] << " ";
}
int main() {
int arr[] = {4, 24, 3, 5, 7, 22, 12, 10};
int x = 2;
int size = sizeof(arr) / sizeof(arr[0]);
Rearrange_Elements(arr, size, x);
return 0;
}
Đầu ra chương trình
Rearrangement of all elements of array which are multiples of x 2 in increasing order is: 4 10 3 5 7 12 22 24