Когда я ввожу число, я получаю 1 независимо от того, какое число я использую.Как я могу это исправить? - PullRequest
0 голосов
/ 20 февраля 2011
//"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;
    }
}

Ответы [ 2 ]

2 голосов
/ 20 февраля 2011

В вашем методе FindThePerctange у вас есть проблема.Внутри цикла while вы объявляете переменную j, устанавливаете ее в 0, увеличиваете до 1, а затем сразу возвращаете.Это означает, что вы получите 1 каждый раз.

Я думаю, что вы пытаетесь сделать это увеличивать j каждый раз в цикле while.Если да, поместите объявление 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. Второй человек имеет шанс 1 на 365 попасть в тот же день.Таким образом, для размера группы 2 вероятность составляет 1/365 или около 0,27.Если предположить, что размер группы равен 3, а 2-й человек не попал первым, у третьего есть шанс 2/365, или около 0,44%.Предполагая, что генератор случайных чисел является абсолютно случайным, ваш шанс на то, что две даты рождения будут сталкиваться, будет (groupsize - 1) / 365.

Таким образом, ваш код должен будет только принять GroupSize.Сокращено до:

<code>
float FindThePerctange(int GroupNumber){
    return (GroupNumber - 1) / 365 * 100;
}
1 голос
/ 20 февраля 2011

Вы нигде не звоните RandArray(), а DayofBirth[] не получает никакого значения.

...