生日巧合计划C

Birthday Coincidence Program c++

本文关键字:计划 巧合 生日      更新时间:2023-10-16

这个问题的代码有什么问题?

假设人们进入空房间,直到一对人分享生日。写一个节目的生日,以模拟一个实验。该程序的输出是添加的人数,直到一对匹配生日为止。

#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;
  }
}

您尚未初始化布尔数组found。访问非初始化的变量将导致不确定的行为。

您应该这样做:

bool found[year] = {false};

这将将数组的所有成员初始化为false

可变长度阵列不是标准的一部分。尽管海湾合作委员会以扩展为支持,但并非每个编译器都这样做。因此,您应该具有编译时常数作为数组的大小。

constexpr int year = 365;

未定义行为的另一个来源是以下检查:

if (found[birthday] == true)

由于birthday范围从1365,因此found[365]将导致界限访问,因为有效索引范围从0364。因此,您可以改用此支票:

if (found[birthday-1] == true)