培训第三天(打印某年的年历)

来源:互联网 发布:java流量监控 编辑:程序博客网 时间:2024/05/17 02:05
已知今天星期六,问n天后星期几
x=(6+n)%7
已知今天星期六,问n天前星期几
x=6-n%7
(一)已知2000年1月1日为星期六,求某一年的日历

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;int num;int isLeapyear(int year)//求某年是否为闰年{   int isOK=0;   isOK=(year%4==0&&year%100!=0||year%400==0)?1:0;  // printf("%d年是%d\n",year,isOK);   return isOK;}int yearDays(int year)//求某年有几天{int days=0;days=(isLeapyear(year)==1) ? 366 : 365;// printf("%d年有%d天\n",year,days);return days;}int yearMonthdays(int year ,int month )//求某年某月的天数{   int days=0;   switch(month)   {   case 1:   case 3:   case 5:   case 7:   case 8:   case 10:   case 12:  days=31;  break;   case 4:   case 6:   case 9:   case 11:  days=30;  break;   case 2:  days=(isLeapyear(year)==1) ? 29 : 28;   break;   } //  printf("%d年%d月有%d天\n",year,month,days);   return days;}int firstYearMonthDaysto2000_1_1(int year , int month)//求某年某月的第一天到2000年1月1日有多少天{int i;int days=0;if(year>=2000){   for(i=2000;i<year;i++)  days+=yearDays(i);  for(i=1;i<month;i++)  days+=yearMonthdays(year,i);}else{for(i=year+1;i<=2000;i++)days+=yearDays(i);for(i=month;i<=12;i++) days+=yearMonthdays(year,i);}// printf("到2000年1月1日有%d\n",days);return days;}int yearMonthWeekDay(int year , int month)//求距2000年1月1日为n天的日子为星期几{int weekday=99;int n=firstYearMonthDaysto2000_1_1(year,month);if(year>=2000){    weekday=(6+n)%7;}else{   weekday=6-n%7;}return weekday;}void displayYearMonth(int year, int month)//输出某年某月的日历{printf("------------------------%d年%d月------------------------\n",year,month);printf("日\t一\t二\t三\t四\t五\t六\t周\n");int i;int count=0;int zhou=1;int days=yearMonthdays(year,month);int weekday=yearMonthWeekDay(year,month);for(i=0;i<weekday;i++){count++;printf("\t");}for(i=1;i<=days;i++){count++;printf("%d\t",i);if(count%7==0){   printf("%d\n",num++);} }if(count%7!=0){int a=count;  for(;a%7!=0;a++)   printf("\t");   printf("%d\n",num);}printf("\n");}void displayYear(int year)//输出某年的日历{int i;for(i=1;i<=12;i++){displayYearMonth(year,i);}}int main(){   int year;   while(~scanf("%d",&year))   { num=1; displayYear(year);   }      return 0;}


0 0
原创粉丝点击