所以我用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;
}
答案 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;