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

已知今天星期六,问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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值