0
//"This program will ask for the number of people in a group and then output percentage likelyhood that two birthdays occur on the same day." << endl << endl;


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

int FindThePerctange(int [], int);
void RandArray(int, int []);
void Counter(int []);

int main (){
    int GroupNumber;
    int DayOfBirth [365] = {};
    char Percant;
    Percant = '%';
    cout << "This program will ask for the number of people in a group and then output percentage likelyhood that two birthdays occur on the same day." << endl << endl;
    cout << "How many in group (0 quits)? "; 
    cin >> GroupNumber;
    if (GroupNumber == 0){
        cout << "\nThanks for using this program.";
    srand(time(0));
    }
    else{
        cout << "In a group of " << GroupNumber << " the chances for two birthdays the same is " << FindThePerctange(DayOfBirth, GroupNumber) << Percant << "." << endl << endl;
        cout << "How many in group (0 quits)? "; 
        cin >> GroupNumber;
        cout << "In a group of " << GroupNumber << " the chances for two birthdays the same is " << FindThePerctange(DayOfBirth, GroupNumber) << Percant << "." << endl << endl;
        cout << "How many in group (0 quits)? " << endl;
        cin >> GroupNumber;
        cout << "Thanks for using this program.";
    }
    cin.get();
    cin.get();
    return 0;
}


int FindThePerctange(int DayOfBirth [], int GroupNumber){
    double Overlap = 0, Percentage;
    for (int d =0; d<=10000; d++){
        (GroupNumber, DayOfBirth);
        while (d <= 365){
            int j;
            j = 0;
            j++;
            if(DayOfBirth[j] >= 2){
                Overlap = Overlap + 1;
                j=365;
            }
        return j;
        }
    Percentage = (Overlap/10000)*100;
    return Percentage;
    }
}

void RandArray(int GroupNumber,  int DayOfBirth[]){
    int Day, d;
    while (d < GroupNumber){
        Day = rand()%365;
        DayOfBirth[Day] +=1;
        d++;
    }
}

void Counter(int DayOfBirth[]){
    for (int d = 0; d<=365; d++){
        DayOfBirth[d] = 0;
    }
}
4

2 回答 2

2

在您的方法 FindThePerctange 中,您遇到了问题。在 while 循环中,您声明变量 j,将其设置为 0,将其递增为 1,然后立即返回它。这意味着您每次都会得到 1 个。

我认为您正在尝试做的是在 while 循环中每次增加 j 。如果是,请将 j 的声明放在 while 循环之外,如下所示:


int FindThePerctange(int DayOfBirth [], int GroupNumber){
    double Overlap = 0, Percentage;
    int j;
    for (int d =0; d<=10000; d++){
        //(GroupNumber, DayOfBirth);
        j = 0;
        while (d <= 365){
            j++;
            if(DayOfBirth[j] >= 2){
                Overlap++;
                j=365;
            }
        }
    Percentage = (Overlap/10000)*100;
    return Percentage;
    }
}

这仍然不能使您的代码工作,但它至少不会返回 1。我不会为您重新编写整个程序(其他人可能会),但它并没有达到您的预期做。

编辑:我想为您提供更多帮助,但您的代码在内部存在缺陷。您最大的问题可能是您没有为 DayOfBirth 数组分配任何值。我建议回去重新编码。你问的问题是微不足道的。考虑以下:

假设每个人的生日是从 1 到 365 的随机数。然后将第一个人的生日分配为 A。第二个人有 365 分之一的机会命中同一天。因此,对于 2 组规模,机会是 1 / 365,或大约 .27 。假设小组人数为 3,并且第二个人没有击中第一个,那么第三个人有 2 / 365 的机会,或大约 0.54% 的机会。假设随机数生成器是完全随机的,那么两个生日发生冲突的机会将是 (groupsize - 1) / 365。

所以你的代码只需要接受一个 GroupSize。它被缩短为:


float FindThePerctange(int GroupNumber){
    return (GroupNumber - 1) / 365 * 100;
}

于 2011-02-20T04:32:34.847 回答
1

您既没有在任何地方打电话RandArray(),也没有 DayofBirth[]获得任何价值。

于 2011-02-20T04:34:43.303 回答