#include <stdio.h>
#define MAX_TRY 50
void printDate ( int n )
/* Formatted printing of a day encoded by an integer between 0 and 364 */
{
int nDays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int m;
/* Determine the month */
m = 0;
while (n >= nDays[m]) n -= nDays[m++];
/* Print the name of the month */
switch (m) {
case 0 : printf("January"); break;
case 1 : printf("February"); break;
case 2 : printf("March"); break;
case 3 : printf("April"); break;
case 4 : printf("May"); break;
case 5 : printf("June"); break;
case 6 : printf("July"); break;
case 7 : printf("August"); break;
case 8 : printf("September"); break;
case 9 : printf("October"); break;
case 10 : printf("November"); break;
default : printf("December"); break;
}
/* Print the date */
printf(" %d\n", n+1);
}
void checkMatch ( int i , int n , int bday[] )
{
int j;
for (j=0; j<i; j++) if (bday[j] == n) {
printf("Match found among %d birthdays.\n",i+1);
printf("Birthdays no. %d and %d are the same...\n",j+1,i+1);
exit(0);
}
/* No match found. Store the day for future comparisons. */
bday[i] = n;
}
int main ()
{
int i, n;
int bday[MAX_TRY];
/* Seed the random number generator with current time in order to get
different outputs on different runs. */
srand((unsigned int)time(NULL));
for (i=0; i<MAX_TRY; i++) {
n = rand() % 365; /* Generate a random birthday */
printf("%2d. ",i+1); /* Generate the loop number */
printDate(n); /* Print the date in the standard format */
checkMatch(i,n,bday); /* Check if this birthday has been previously
generated. If yes, report and exit, else
store it for future comparisons. */
}
printf("OOPS! No matches found among %d birthdays. Bad luck! Try again.\n",MAX_TRY);
}
[Course home] [Home]