Nội dung Bài tập
Mã:
SAPXEP02
Tên:
Sắp xếp 02
Dạng thi:
oi
Thang điểm:
10 điểm
Giới hạn thời gian:
1 giây
Giới hạn bộ nhớ:
64 MB
Được tạo bởi:
tamtd
Viết chương trình nhập vào dãy N số nguyên. Hãy sắp xếp dãy số sao cho các số nguyên tố có thứ tự giảm dần, các số không phải nguyên tố vẫn giữ nguyên vị trí.
Dữ liệu đầu vào:
- Dòng đầu tiên là số nguyên dương cho biết số lượng phần tử trong dãy số
- Dòng tiếp theo là N số trong dãy, mỗi số cách nhau 1 khoảng trắng
Dữ liệu đầu ra:
- Dãy số được sắp xếp theo yêu cầu. Mỗi số được cách nhau 1 khoảng trắng

Vd: 
input: 
8
4 2 3 1 9 6 8 7
output: 
4 7 3 1 9 6 8 2

input:
9
44 32 10 12 50 9 6 8 72
output: 
44 32 10 12 50 9 6 8 72

    Quảng cáo
       Ngôn ngữ : 

       Theme : 


1
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX



      Ai có thể xem bài này : 

Phần thảo luận
Font Size...
Font Family...
Font Format...





#1 
Được tạo bởi: 2311558475
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i * i <= n; i++) 
        if (n % i == 0) return false;
    return true;
}

int main() {
    int n;
    cin >> n;
    vector<int> arr(n), primes;

    for (int i = 0; i < n; i++) {
        cin >> arr[i];
        if (isPrime(arr[i])) primes.push_back(arr[i]);
    }
    sort(primes.rbegin(), primes.rend());

    int idx = 0;
    for (int i = 0; i < n; i++) {
        if (isPrime(arr[i])) cout << primes[idx++] << " ";
        else cout << arr[i] << " ";
    }
    return 0;
}

Thời điểm tạo: 14:02:45 15/03/2025
#2 
Được tạo bởi: 2100002240
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// Hàm kiểm tra số nguyên tố
bool isPrime(int num) {
    if (num < 2) return false;
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) return false;
    }
    return true;
}

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    vector<int> primes;
    
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
        if (isPrime(arr[i])) {
            primes.push_back(arr[i]);
        }
    }
    
    // Sắp xếp các số nguyên tố giảm dần
    sort(primes.rbegin(), primes.rend());
    
    int primeIndex = 0;
    for (int i = 0; i < n; i++) {
        if (isPrime(arr[i])) {
            arr[i] = primes[primeIndex++];
        }
    }
    
    for (int num : arr) {
        cout << num << " ";
    }
    
    return 0;
}


Thời điểm tạo: 13:03:21 30/03/2025
#3 
Được tạo bởi: 2311557389

Đoạn mã này được viết để thực hiện các thao tác sau:

  1. Nhập một dãy số nguyênn phần tử.

  2. Xác định các số nguyên tố trong dãy.

  3. Sắp xếp các số nguyên tố theo thứ tự giảm dần.

  4. In ra dãy số, với các số nguyên tố được thay thế bằng các số nguyên tố đã được sắp xếp, còn các số không phải là số nguyên tố vẫn giữ nguyên vị trí.

Giải thích chi tiết các phần trong mã:

1. Hàm isPrime(int n):

  • Hàm này kiểm tra xem một số có phải là số nguyên tố không.

  • Nếu n < 2, trả về false (vì số nguyên tố phải lớn hơn hoặc bằng 2).

  • Dùng vòng lặp từ 2 đến sqrt(n) (vì nếu một số có ước số lớn hơn căn bậc hai của nó thì nó sẽ có ước số nhỏ hơn căn bậc hai), nếu tìm thấy ước số nào chia hết cho n, hàm trả về false.

  • Nếu không có ước số nào khác ngoài 1 và chính nó, hàm trả về true (số nguyên tố).

2. Hàm main():

  • Đọc vào số nguyên n, là số lượng phần tử trong dãy số.

  • Dùng một vector<int> tên là arr để lưu trữ dãy số ban đầu và một vector<int> khác tên là primes để lưu trữ các số nguyên tố.

Quy trình:

  • Đọc từng phần tử trong dãy số, kiểm tra xem nó có phải là số nguyên tố không bằng cách gọi hàm isPrime().

  • Nếu phần tử là số nguyên tố, thêm nó vào vector primes.

3. Sắp xếp số nguyên tố:

  • Sau khi tất cả các số nguyên tố đã được đưa vào vector primes, ta sẽ sắp xếp chúng theo thứ tự giảm dần bằng cách sử dụng sort(primes.rbegin(), primes.rend()).

    • rbegin()rend() là các iterator để sắp xếp giảm dần (ngược lại so với sắp xếp mặc định là tăng dần).

4. In ra dãy số:

  • Duyệt qua từng phần tử của dãy số ban đầu (arr):

    • Nếu phần tử là số nguyên tố, thay thế nó bằng phần tử tương ứng trong vector primes (theo thứ tự đã sắp xếp giảm dần).

    • Nếu phần tử không phải là số nguyên tố, in trực tiếp giá trị của nó.

  • Dùng một biến idx để theo dõi vị trí trong vector primes, đảm bảo rằng các số nguyên tố sẽ được thay thế theo thứ tự đã sắp xếp.

Mô phỏng cách chạy:

Giả sử bạn có dãy số sau:

Input:

6
1 2 3 4 5 6
  • Bước 1: arr = {1, 2, 3, 4, 5, 6}

  • Bước 2: Xác định số nguyên tố trong dãy:

    • Số nguyên tố: 2, 3, 5 => primes = {2, 3, 5}

  • Bước 3: Sắp xếp các số nguyên tố giảm dần:

    • primes = {5, 3, 2}

  • Bước 4: Duyệt qua dãy số ban đầu và thay thế số nguyên tố bằng các số đã sắp xếp:

    • Dãy số mới sau khi thay thế: 1 5 3 4 2 6

Output:

1 5 3 4 2 6

Tổng kết:

  1. Đọc vào dãy số.

  2. Xác định các số nguyên tố và sắp xếp chúng giảm dần.

  3. Thay thế các số nguyên tố trong dãy ban đầu bằng các số nguyên tố đã được sắp xếp theo thứ tự giảm dần.

  4. In dãy số kết quả.


Thời điểm tạo: 11:42:26 04/04/2025
1