2015-09-01 3 views
-1

Я пытаюсь выяснить программу Paradox Birthday для моего класса C++. Это то, что у меня есть до сих пор, но оно не работает. Я попробовал просмотреть другие вопросы по одной и той же теме, но я все еще довольно потерян, поэтому любая помощь будет очень признательна.C++ Birthday Paradox Program

//This program calculates the likelihood of any two people in groups of 2-50 people 
//having their birthday on the same day, also known as the Birthday Paradox. 

#include <iostream> 
using namespace std; 

int main() 
{ 
int people, trial, count = 0, birthdays[50], numMatches, NUM_TRIALS = 5000; 
double total; 

//function call 
sameBirthday(birthdays, people); 
numMatches = 0; 

for (people = 2; people <= 50; people++) 
{ 
    //Run trials to see if people have the same birthday 
    //Reset number of matches 
    numMatches = 0; 
    for (trial = 0; trial < NUM_TRIALS; trial++) 
    { 
     //Randomly generate up to "people" birthdays 
     for (int i = 0; i < people, i++) 
     { 
      birthdays[people] = (rand() % 365) + 1; 
      //Check to see if any two people have the same birthday 
      for (i = 1; i < people; i++) 
      { 
       //birthday one 
       for (int j = 0; j < i-1; j++) 
       { 
        //birthday two 
        for (int k = j +1; k < i; k++); 
       } 
      } 
     } 
    } 
} 

bool sameBirthday(int birthdays[], int people) 
{ 
    //if the two birthdays are the same, add one to the count 
    if (birthdays[j] == birthdays[k]) 
    { 
     people++; 
    } 

    total = (numMatches/5000.0); 
    cout << "For " << people << " people, the probability of two birthdays is about " << total << endl; 

} 

return 0; 
+0

Возможный дубликат (выбрать один) ["stackoverflow C++ birthday paradox"] (https://www.google.com/search?q=stackoverflow+c%2B%2B+birthday+paradox&ie=utf-8&oe=utf- 8) –

+0

Когда вы использовали отладчик, какие заявления представляют проблему? –

+0

Вот одна проблема: 'birthdays [people] ='. Переменная 'people' не изменяется в цикле и выходит за пределы диапазона массива. Вы имели в виду использовать первую переменную 'i'? –

ответ

0
for (people = 2; people <= 50; people++) 
{ 
    //Run trials to see if people have the same birthday 
    //Reset number of matches 
    numMatches = 0; 
    for (trial = 0; trial < NUM_TRIALS; trial++) 
    { 
     //Randomly generate up to "people" birthdays 
     for (int i = 0; i < people, i++) 
     { 
      //here I use i instead of people so every time i put the new number in a different position 
      birthdays[i] = (rand() % 365) + 1; 

      //this loop check if some birthday is equal to the one just generated 
      for(int j = 0; j < i; j++){ 
       if(birthday[j] == birthday[i]){ 
        //here do what u want to do when 2 people have the same birthday 
       } 
      }     
     } 
    } 
} 

пытается использовать этот цикл, таким образом, вы проверить для каждого числа людей, от 2 до 50, если есть 2-х люди с таким же днем ​​рождения.