2

(5,3,1,0 のように、整数の配列 (0,1,2,3,4,5) をモンジュ シャッフル タイプの順序 (最大の奇数から最小の奇数、次に最小の偶数から最大の偶数) で並べ替えるにはどうすればよいですか? ,2,4)。この問題を解決しようとして苦労しています。

私はこれまでに試しました:

void mongeShuffle(int A[], int B[], int size)
{
    int i = 0; // i is the index of the arr
    while(i < size)
    {
        if(A[i] % 2 == 1)
        {
            B[i] = A[i];
            i++;
        }
        else
        {
            B[i] = A[i -1];
            i++;
        }
    }
}
4

2 に答える 2

4

ヘッダーを使用して関数を使用し、カスタム コンパレータを指定できますc++。このようなもの:algorithmsort

#include <algorithm>
#include <iostream>

bool my_comp (int a, int b)
{
    if( a%2 == 1 && b%2 == 1)
    {  
        // Both odd
        return a > b;
    }
    else if( a%2 == 0 && b%2 == 0)
    {  
        // Both even
        return a < b;
    }
    else return a%2 == 1;
}

int main()
{
    int A[] = {0,1,2,3,4,5};
    std::sort(A, A + 6, my_comp);

    for(int i: A)
    {  
        std::cout << i << std::endl;
    }
}
于 2012-10-20T07:32:58.967 に答える
2

値ではなく、偶数または奇数のインデックスに基づいてシャッフルする必要があります。

#include <iostream>

void mongeShuffle(int A[], int B[], int size)
{
    for(int i = 0; i < size; ++i)
    {
        if(i % 2 == 0)
        {
            B[(size+i)/2] = A[i];
        }
        else
        {
            B[size/2 - i/2 - 1] = A[i];
        }
    }
}
于 2012-10-20T07:06:13.253 に答える