如何确保数组具有偶数个元素

时间:2016-11-04 08:11:25

标签: c++

所以我用rand()在数组中生成一个随机数字串。但是,我只想生成偶数位数。示例:675986(生成6位数)或56237946(生成8位数)。

这是我目前的代码

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

const int MAX = 30;


void constructArray(char[], int);

void printArray (const char[], int);


int main()
{
    char str [MAX];
    int n;

    srand(time(NULL));

    n = rand() % 20 + 4;

    constructArray(str, n);
    printArray(str, n);

}

void constructArray(char str[], int n)
{
    char digits [] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};

    int k;




    for (int i = 0; i < n; i++)
    {    
        k = rand() % 10;
        str [i] = digits[k];



        if (str[0] == '0')
        {
            str[0] = digits[k] + 1;
        }

    }

}

void printArray (const char str [], int n)
{
    cout << "Given ";
    for (int i = 0; i < n; i++)
        cout << str [i];
    cout << endl;
}

2 个答案:

答案 0 :(得分:1)

main()中,您确定数字n的数量:

n = rand() % 20 + 4;

要检查它是否均匀,只需!(n&1)即可。如果它是奇数,你可以然后减少它。或者,您也可以直接转到(~1&n),只需将您的号码转换为偶数。 Online demo

其他说明:

这可以使用bit manipulation magics。它检查是否设置了最低有效位,当且仅当数字为奇数时才为真。替代方案重置最低有效位,确保数字是偶数。它将最接近的较小偶数转换为正奇数,使其保持在当前上限24之下。

答案 1 :(得分:0)

为什么不使用整数除法来获益:

n = rand() % 20 + 4;
n = n / 2;
n = n * 2;

或者您可以检查它是否奇怪:

if (n % 2 != 0) n = n + 1;