C語言任意年月日曆輸出

寫在前面:這裏是小王成長日誌,一名在校大學生,想在學習之餘將自己的學習筆記分享出來,記錄自己的成長軌跡,幫助可能需要的人。歡迎關注與留言。

題目:

題目鏈接: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語言學習專欄


如果以上內容有任何不準確或遺漏之處,或者你有更好的意見,就在下面留個言讓我知道吧-我會盡我所能來回答。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章