37 黑色星期五
问题描述 :
13号又是星期五是一个不寻常的日子吗? 13号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n年里13 日落在星期一,星期二......星期日的次数.这个测试从1900年1月1日到 1900+n-1年12月31日.n是一个非负数且不大于400.
这里有一些你要知道的: 1900年1月1日是星期一. 4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.
输入说明 :
一个整数n(1<= n <= 400).
输出说明 :
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一.....星期五的次数.
输入范例 :20
输出范例 :36 33 34 33 35 35 34
思想:遍历每一年的每个月份的13号,同时计算出下一个月13号是周几,注意从周六开始输出。
#include <stdio.h> int main() { int a, b,i,j,day=6; int res[8]={0}; int r; int day1[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int day2[12]={31,29,31,30,31,30,31,31,30,31,30,31}; scanf("%d", &a); for(i=0;i<a;i++){ int x = i+1900; if((x % 100 == 0 && x % 400 == 0) || (x % 100 != 0 && x % 4 == 0)){ for(j=0;j<12;j++){ res[day]++; day=(day+day2[j]-1)%7+1; } }else{ for(j=0;j<12;j++){ res[day]++; day=(day+day1[j]-1)%7+1; } } } printf("%d ",res[6]); printf("%d ",res[7]); for(i =1;i<6;i++){ printf("%d ",res[i]); } return 0; }