Sắp xếp sao cho số chẵn đứng trước, lẻ đứng sau, chẵn giảm dần, lẻ tăng dần

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài

Cho một mảng a gồm n phần tử là số nguyên. Sắp xếp sao cho số chẵn đứng trước, lẻ đứng sau, chẵn giảm dần, lẻ tăng dần


Đầu vào: Dòng đầu tiên là số lượng phần tử n, dòng tiếp theo là n phần tử của mảng

--

Ràng buộc: 1 <= n <= 1000000; 0 <= a[i] <= 1000000


Đầu ra: In ra mảng đã sắp xếp theo tiêu chí trên


Input:
10
1 2 10 9 6 5 8 7 4 3
Output:
10 8 6 4 2 1 3 5 7 9

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    Nguyen_Ngoc_Phuoc_Thien  đã bình luận lúc 26, Tháng 11, 2025, 11:43

    Với bài này mình sẽ dùng cách tách từng phần rồi sắp xếp

    1.mình sẽ tách thành hai phần

    code cho phần này

    for(ll i=1,x;i<=n;i++){
        cin>>x;
        if(x%2==0){
            sc++;
            c[i]=x;
        }
        else{
            sl++;
            l[i]=x;
        }
    }
    

    sao đó mình sẽ sắp xếp lại thành dãy rồi xuất ra

    code cho phần này

    sort(c+1,c+1+n);reverse(c+1,c+1+n);
    sort(l+1,l+1+n);reverse(l+1,l+1+n);
    for(ll i=1;i<=sc;i++)cout<&lt;c[i]<<" ";
    for(ll i=sl;i>=1;i--)cout<&lt;l[i]<<" ";
    

    code đày đủ

    #include <bits/stdc++.h>
    #define ll long long
     using namespace std;
      int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    ll n,sc=0,sl=0;cin>>n;
    ll c[n+1],l[n+1];
    memset(c,0,sizeof(c));
    memset(l,0,sizeof(l));
    for(ll i=1,x;i<=n;i++){
        cin>>x;
        if(x%2==0){
            sc++;
            c[i]=x;
        }
        else{
            sl++;
            l[i]=x;
        }
    }
    sort(c+1,c+1+n);reverse(c+1,c+1+n);
    sort(l+1,l+1+n);reverse(l+1,l+1+n);
    for(ll i=1;i<=sc;i++)cout<&lt;c[i]<<" ";
    for(ll i=sl;i>=1;i--)cout<&lt;l[i]<<" ";
    

    }