0

私は学校の割り当てとして誕生日のパラドックスプログラムをしなければなりません。プログラムを実行しましたが、正しい答えを得るのに苦労しているようです。関数内のループに問題があると思いますcheck_birthdays

コードは次のとおりです。

#include <iostream>
using namespace std;
#include<time.h>


void check_birthdays (int birthdays[], int num, int count=0)
{
     for (int i=0; i<num; i++) //to check each person in the group
     {
         for (int j=i+1; j<num; j++) //against every other person in the group
         {
             if (birthdays[i]==birthdays[j])
                 count++; 
         }
     }
     //print out the number of people with ame birthday
     cout<<"The number of people who share their birthday is "<<count;
}

int main()
{
    //create a variable for an inputted number of people
    int people, count;
    cout<< "Please input a number of people: "<<endl;;
    cin>>people;

    int birthdays[people];

    //input check
    if (people<50 || people>100)
        cout<<"Error, please try again.";
    else
    { //fill that array with random numbers
        for (int i=0; i<people; i++)
        {
            srand (time (NULL));
            birthdays[i]= rand()%365;
        }
        check_birthdays (birthdays, people, count); //send to the next function
    }
}
4

2 に答える 2

0

「うまくいかない」という意味がわからなくても、一致した誕生日を無効な値に置き換えて、ループを進めたときに再び一致しないようにする必要があると思います。

srand()もう 1 つのヒントとして、毎回電話する必要はありません。

于 2013-02-19T11:04:56.360 に答える
0

ではmain()、変数countは初期化されずに に渡されるcheck_birthdays()ため、結果は何でもかまいません。

また、C++ では、配列のサイズが実行時に決定される場合、通常の解決策は を使用することstd::vectorです。

于 2013-02-19T13:47:27.127 に答える