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 positive and will not exceed 400.
Note that the start year is NINETEEN HUNDRED, not 1990.
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
/*ID: liluvu1LANG: C++TASK: friday*/#include <stdio.h>#include <string.h>#define MAX_N 400int days[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};int counts[7]; // begin with Saturday =0, Sunday=1, Monday=2, Tuesday, ..., Fridayint leap(int year){ if ((year%4 == 0 && year%100 != 0) || year%400 == 0) return 1; return 0;}int calWeek(int day, int first){ return (day + first -1)%7;}int main(){ FILE *fin = NULL; FILE *fout = NULL; fin = fopen("friday.in", "r"); fout = fopen("friday.out", "w"); int n = 0; fscanf(fin, "%d\n", &n); int first = 2; //Monday, frist day of a year for (int i = 0; i < n; i++) { int isLeap = leap(1900+i); int acc = 0; for (int j = 1; j <= 12; j++) { counts[calWeek(acc+13, first)]++; acc += days[isLeap][j]; } first = calWeek(acc+1, first); } for (int i = 0; i < 7; i++) { if (i == 6) fprintf(fout, "%d", counts[i]); else fprintf(fout, "%d ", counts[i]); } fprintf(fout, "\n"); return 0;}
联系客服