寫在前面:這裏是小王成長日誌,一名在校大學生,想在學習之餘將自己的學習筆記分享出來,記錄自己的成長軌跡,幫助可能需要的人。歡迎關注與留言。
題目:
題目鏈接:https://www.dotcpp.com/oj/problem1493.html
題目 1493: [藍橋杯][算法提高VIP]任意年月日曆輸出
時間限制: 1Sec 內存限制: 128MB 提交: 919 解決: 285
題目描述
已知2007年1月1日爲星期一。
設計一函數按照下述格式打印2007年以後(含)某年某月的日曆,2007年以前的拒絕打印。
爲完成此函數,設計必要的輔助函數可能也是必要的。其中輸入爲年分和月份。
注意:短線“-”個數要與題目中一致,否則系統會判爲錯誤。
輸入
年月和月份
輸出
無
樣例輸入
2010 9
樣例輸出
C語言解法
#include <stdio.h>
int fun(int y, int m);
int judge(int y, int m);
int main()
{
int year, month, i;
scanf("%d %d", &year, &month);
printf("---------------------\n\
Su Mo Tu We Th Fr Sa\n\
---------------------\n");
// 判斷當前從周幾開始打印
int start = fun(year, month);
// printf("%d\n", start);
int days = judge(year, month);
for (i = 1; i <= days + start; i++)
{
if (i <= start)
printf(" ");
else
printf("%3d", i - start);
if (i % 7 == 0)
printf("\n");
}
printf("\n---------------------\n");
}
int fun(int y, int m)
{
int sum = 0, i;
//先加本年到這個月爲止之前的天數
for (i = 1; i < m; i++)
sum += judge(y, i);
for (i = 2007; i < y; i++)
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
sum += 366;
else
sum += 365;
return (sum + 1) % 7; //注意2007 1 1是星期一
}
//根據傳入的年份和月份判斷當前月有多少天
int judge(int y, int m)
{
if (m == 2 && ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0))
return 29;
else if (m == 2)
return 28;
else
switch (m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
break;
case 4:
case 6:
case 9:
case 11:
return 30;
break;
}
}
都看到這裏了,各位哥哥姐姐叔叔阿姨給小王點個贊 關個注 留個言吧,和小王一起成長吧,你們的關注是對我最大的支持。
有事沒事進來看看吧 : 小王的博客目錄索引
C語言專欄看這 : C語言學習專欄
如果以上內容有任何不準確或遺漏之處,或者你有更好的意見,就在下面留個言讓我知道吧-我會盡我所能來回答。