Is Friday the 13th really an unusual event?
That is, does the 13th of the month land on a Friday less often than on any other day of the week? To answer this question, write a program that will compute the frequency that the 13th of each month lands on Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday over a given period of N years. The time period to test will be from January 1, 1900 to December 31, 1900+N-1 for a given number of years, N. N is non-negative and will not exceed 400.
There are few facts you need to know before you can solve this problem:
Do not use any built-in date functions in your computer language.
Don't just precompute the answers, either, please.
20
36 33 34 33 35 35 34
View Code/*
ID: lxlenovos1
PROG: friday
LANG: C++
*/
#include < iostream >
#include < fstream >
#include < string >
#include < vector >
#include < string .h >
using namespace std;
bool testloop( int n )
{
if ( n % 100 == 0 )
{
if ( n % 400 == 0 )
return true ;
else
return false ;
}
else
{
if ( n % 4 == 0 )
return true ;
else
return false ;
}
}
int fday( int n )
{
int i, endday, alldays;
endday = 1 ; // stand for Mon when 1900.1.1
for ( i = 1900 ; i < n; i ++ )
{
if ( testloop( i ) )
{
alldays = 366 ;
}
else
{
alldays = 365 ;
}
endday = ( endday += alldays % 7 ) % 7 ;
}
return endday;
}
int year[ 12 ] = { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };
int yearleap[ 12 ] = { 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };
int resultweek[ 7 ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 };
void addresult( int n )
{
switch ( n )
{
case 1 : resultweek[ 2 ] ++ ; break ;
case 2 : resultweek[ 3 ] ++ ; break ;
case 3 : resultweek[ 4 ] ++ ; break ;
case 4 : resultweek[ 5 ] ++ ; break ;
case 5 : resultweek[ 6 ] ++ ; break ;
case 6 : resultweek[ 0 ] ++ ; break ;
case 0 : resultweek[ 1 ] ++ ; break ;
default : break ;
}
}
int main( void )
{
ofstream fout( " friday.out " );
ifstream fin( " friday.in " );
/* cout << testloop( 1900 );
cout << testloop( 1901 ); */
/* cout << fday( 1901 ); */
int n, i, j, thday;
int * tempyear;
int firstday;
int z = 1 ;
// cin >> n;
fin >> n;
// cout << "the result is " << endl;
int endyear = n + 1900 - 1 ;
for ( i = 1900 ; i <= endyear; i ++ )
{
firstday = fday( i );
if ( testloop( i ) )
{
// leap year
tempyear = yearleap;
}
else
{
// not leap year
tempyear = year;
}
for ( j = 0 ; j < 12 ; j ++ )
{
// int month = *( tempyear + j );
if ( j == 0 )
{
firstday = ( firstday += 13 % 7 - 1 ) % 7 ;
}
else
{
int temp = * ( tempyear + j - 1 );
firstday = ( firstday += temp % 7 ) % 7 ;
}
addresult( firstday );
// cout << "z is " << z << endl;
// z++;
}
}
for ( j = 0 ; j < 7 ; j ++ )
// cout << resultweek[j] << endl;
{
fout << resultweek[j];
if ( j == 6 )
fout << endl;
else
fout << " " ;
}
}