天天看點

Bailian2871 Bailian3682 整數奇偶排序【排序】

Bailian2871 Bailian3682 整數奇偶排序

問題簡述:(略)

問題分析:

    Bailian2871 Bailian3682 整數奇偶排序。這個題用C++來實作代碼會比較簡單一些,使用算法函數sort()來實作。

    一種做法是先進行簡單排序,然後按從大到小輸出奇數,再按從小到大輸出偶數。第二種做法是在進行排序是指定比較函數cmp(),規定元素的順序關系,考慮兩個數的到奇偶性,需要考慮四種組合。第三種做法是改造排序算法,把元素比較封裝到函數cmp()中。

程式說明:(略)

參考連結:(略)

題記:(略)

AC的C語言程式如下:

/* Bailian2871 Bailian3682 整數奇偶排序 */

#include <stdio.h>

#define N 10
int a[N];

int cmp(int a, int b)
{
    if(a & 1 && (b & 1) == 0)
        return 0;
    else if((a & 1) == 0 && b & 1)
        return 1;
    else if(a & 1 && b & 1)
        return a < b;
    else if((a & 1) == 0 && (b & 1) == 0)
        return a > b;
    else
        return 1;
}

int main(void)
{
    int i, j, tmp;

    while(~scanf("%d", &a[0])) {
        for(i = 1; i < N; i++)
            scanf("%d", &a[i]);

        // 冒泡排序
        for(i = 0; i < N - 1; i++)
            for(j = N - 1; j >= i + 1; j--)
                if(cmp(a[i], a[j])) {
                    tmp = a[i];
                    a[i] = a[j];
                    a[j] = tmp;
                }

        for(i = 0; i < N; i++)
            printf("%d ", a[i]);
        printf("\n");
    }

    return 0;
}
           

AC的C++語言程式(元素比較函數)如下:

/* Bailian2871 Bailian3682 整數奇偶排序 */

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 10;
int a[N];

bool cmp(int a, int b)
{
    if(a & 1 && (b & 1) == 0)
        return true;
    else if((a & 1) == 0 && b & 1)
        return false;
    else if(a & 1 && b & 1)
        return a > b;
    else if((a & 1) == 0 && (b & 1) == 0)
        return a < b;
    else
        return false;
}

int main()
{
    while(~scanf("%d", &a[0])) {
        for(int i = 1; i < N; i++)
            scanf("%d", &a[i]);

        sort(a, a + N, cmp);

        for(int i = 0; i < N; i++)
            printf("%d ", a[i]);
        printf("\n");
    }

    return 0;
}
           

AC的C++語言程式(簡單排序)如下:

/* Bailian2871 Bailian3682 整數奇偶排序 */

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 10;
int a[N];

int main()
{
    while(~scanf("%d", &a[0])) {
        for(int i = 1; i < N; i++)
            scanf("%d", &a[i]);

        sort(a, a + N);

        for(int i = N - 1; i >= 0; i--)
            if(a[i] & 1) printf("%d ", a[i]);
        for(int i = 0; i < N; i++)
            if((a[i] & 1) == 0) printf("%d ", a[i]);
        printf("\n");
    }

    return 0;
}
           

繼續閱讀