2016-11-04 68 views
1

所以我用一個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; 
} 
+1

'炭CH = '0' + 2 *(RAND()%5)'? –

回答

1

main()您確定的位數n

n = rand() % 20 + 4; 

要檢查它是否是偶數,只是做!(n&1)。如果它很奇怪,那麼你可以減少它。或者,您也可以直接轉到(~1&n),它只是將您的號碼轉換爲偶數。 Online demo

附加說明:

這個工程使用bit manipulation magics。它檢查是否設置了最低有效位,當且僅當該數字是奇數時才爲真。替代方案重置最不重要的位,確保編號是均勻的。它把在最近的小偶數正奇數,這樣它會留在你目前的上限是24

+0

'rand()%10 * 2 + 4'? –

+0

@MooingDuck :-)是的,這更簡單!但是OP可以保留我的答案,以防他有較少控制的數字(例如'cin >> n;');-) – Christophe

0

爲什麼不使用整數除法對您的好處:

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

或者你可以只檢查如果是奇數:

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

+0

我不知道它是否感興趣,但原始數字在4到23之間。隨着23,你會增加超出這些界限,如果MAX似乎被定義爲24,這可能是一個問題。 – Christophe

相關問題