这题算水题吧, 但我还是放上来了, 因为觉得自己写的代码很有美感(要点脸可以吗...)
问题描述
已知 2007 年 1 月 1 日为星期一设计一函数按照下述格式打印 2007 年以后 (含) 某年某月的日历, 2007 年以前的拒绝打印为完成此函数, 设计必要的辅助函数也是必要的
样例输入
一个满足题目要求的输入范例
例:
2050 3
样例输出
与上面的样例输入对应的输出
例:
数据规模和约定
输入数据中每一个数的范围
例: 年 2007-3000, 月: 1-12
--------- 分割线 ---------
- #include<stdio.h>
- int is_leap_year(int year)
- {
- return (year%4||year%100==0&&year%400!=0)?0:1;
- }
- int year_days(int year)
- {
- return is_leap_year(year)?366:365;
- }
- int month_days(int year,int month)
- {
- int days;
- if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
- days=31;
- else if(month!=2)
- days=30;
- if(month==2)
- {
- if(is_leap_year(year))
- days=29;
- else
- days=28;
- }
- return days;
- }
- int week(int year,int month)
- {
- int day1=0;
- month--;
- while(month)
- {
- day1+=month_days(year,month);
- month--;
- }
- while(year!=2007)
- {
- year--;
- day1+=year_days(year);
- }
- return day1%7;
- }
- void show(int year,int month)
- {
- int day1,t,i;
- if(month>=10)
- printf("Calendar %d - %d\n",year,month);
- else
- printf("Calendar %d - 0%d\n",year,month);
- printf("---------------------\n");
- printf("Su Mo Tu We Th Fr Sa\n");
- printf("---------------------\n");
- day1=week(year,month);
- t=day1+1;
- while(t%7||t)
- {
- printf(" ");
- t--;
- }
- for(i=1;i<=month_days(year,month);i++)
- {
- printf("-",i);
- if((i+day1+1)%7==0||i==month_days(year,month))
- printf("\n");
- }
- printf("---------------------\n");
- }
- int main()
- {
- int y,m;
- scanf("%d%d",&y,&m);
- show(y,m);
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2515626.html