Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Sắp xếp các phần tử mảng là bội số của x theo thứ tự tăng dần trong C++

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 vector vec lưu các phần tử chia hết cho x.
    • Duyệt mảng: nếu arr[i] % x == 0 thì vec.push_back(arr[i]).
    • Sort vec tăng dần.
    • Duyệt mảng lần 2: nếu arr[i] % x == 0 thì gán arr[i] = vec[j++].
    • In mảng kết quả.

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