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天. 年份可以被4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年) 以上规则不适合于世纪年.可以被400整除的世纪年为闰年,否则为平年.所以,1700,1800,1900和2100年是平年,而2000年是闰年. 请不要预先算好数据!
输入
一个整数n
输出
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一.星期五的次数
样例输入
20
样例输出
36 33 34 33 35 35 34
#include<stdio.h>
int leap_year(int year) {
if ((year % 4 == 0 || year % 400 == 0) && year % 100 != 0) return 1;
else return 0;
}
int main() {
int n;
scanf_s("%d",&n);
int month_Day[2][12] = { {31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31} };
int week[20] = {0}, wek = 1;
wek = 6;
week[wek]++;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 12; j++) {
if (i == (n-1)&&j == 11) { j++; continue; }
else {
wek = (wek + (month_Day[leap_year(1900 + i)][j]%7))%7;
week[wek]++;
}
}
}
printf("%d", week[6]);
printf(" %d", week[0]);
for (int i = 1; i <= 5; i++) {
printf(" %d", week[i]);
}
return 0;
}
学校里的OJ只有错误78%,我也不清楚是什么条件上考虑不周
供参考:
#include <stdio.h>
int get_Week(int y,int m,int d)
{
int week = 0;
if(m==1 || m == 2){
m += 12;y--;
}
week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
return week;
}
int main()
{
int y,m,n;
int cdofc[7]={0}; //[0~6]:周一 -- 周日)
scanf("%d",&n);
for(y=1900,m=1; y<1900+n; m++,m>12?(m=1,y++):m)
cdofc[get_Week(y,m,13)]++;
printf("%d %d %d %d %d %d %d\n",cdofc[5],cdofc[6],cdofc[0],
cdofc[1],cdofc[2],cdofc[3],cdofc[4]);
return 0;
}
你自己能准备一些测试数据来测试么?
谢谢!不过也由于我是个憨批,我判断闰年的时候写错了
判断闰年:
int isLeap(int y)
{
if((y%4==0 && y%100!=0)||(y%400==0))
return 1;
else
return 0;
}