Программа совпадений на день рождения c ++ - PullRequest
0 голосов
/ 27 февраля 2019

Что не так с моим кодом для этого вопроса?

Предположим, что люди входят в пустую комнату, пока пара людей не поделит день рождения.Напишите программу BirthdayCoincidence для имитации одного эксперимента.Результатом этой программы является количество людей, которые были добавлены до тех пор, пока у пары не появятся совпадающие дни рождения.

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

 int main(){
  srand(time(0));
  int year = 365;
  int people = 0;
  int daycnt = 0;

  bool found[year];

  while(daycnt<year){
    people++;
    int birthday = (int)(rand() % year+1);
    cout<<birthday<<endl;
    if (found[birthday] == true){
      daycnt++;
      cout<<people<<endl;
      break;}
    found[birthday] = true;
  }
}

1 Ответ

0 голосов
/ 27 февраля 2019

Вы не инициализировали логический массив found.Доступ к неинициализированным переменным приведет к неопределенному поведению.

Вы должны сделать это:

bool found[year] = {false};

Это инициализирует все члены массива переменной false.

.массивы длины не являются частью стандарта.Хотя GCC поддерживает их как расширение, не каждый компилятор поддерживает.Таким образом, вы должны иметь постоянную времени компиляции в качестве размера массива.

constexpr int year = 365;

Другим источником неопределенного поведения является следующая проверка:

if (found[birthday] == true)

Поскольку birthday в диапазоне от 1 до 365, found[365] вызовет выход изограничивает доступ в качестве допустимого диапазона индекса от 0 до 364.Таким образом, вы можете использовать эту проверку вместо:

if (found[birthday-1] == true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...