慢慢来,别急 2023-09-11 18:14 采纳率: 66.7%
浏览 50
已结题

c语言任务 05-05-13 日期识别3

img

img


任务05-05-13 日期识别3
怎么写,快崩溃了,不知道从哪下手。碰过类似的题,前面的题还好,到这里不会了。

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-09-12 17:26
    关注

    供参考:

    #include<stdio.h>
    int is_leap_year(int y)  // 判断是否闰年
    {
        return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);
    }
    int DaysOfMonth(int y, int m) // 某月的天数
    {
        int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
        if (is_leap_year(y) && m == 2)
            return  days[m - 1] + 1;
        return days[m - 1];
    }
    int is_valid_date(int y, int m, int d) //判断日期是否合法
    { 
        if (y < 1 || y > 9999 || m < 1 || m > 12 || d < 1 || d > 31)
            return 0;
        return  d <= DaysOfMonth(y, m);
    }
    void compare(int* a, int* b, int* c)
    {
        int t;
        if (*a > *b) t = *a, * a = *b, * b = t;
        if (*a > *c) t = *a, * a = *c, * c = t;
        if (*b > *c) t = *b, * b = *c, * c = t;
    }
    int main()
    {
        int a, b, c, num = 0, valid_date[6][3] = { 0 };
        scanf("%d%*c%d%*c%d", &a, &b, &c);
        compare(&a, &b, &c);
        if (is_valid_date(a, b, c)) {
            valid_date[num][0] = a;
            valid_date[num][1] = b;
            valid_date[num][2] = c;
            num++;
        }
        if (is_valid_date(a, c, b) && b != c) {
            valid_date[num][0] = a;
            valid_date[num][1] = c;
            valid_date[num][2] = b;
            num++;
        }
        if (is_valid_date(b, a, c) && a != b) {
            valid_date[num][0] = b;
            valid_date[num][1] = a;
            valid_date[num][2] = c;
            num++;
        }
        if (is_valid_date(b, c, a) && c != b) {
            valid_date[num][0] = b;
            valid_date[num][1] = c;
            valid_date[num][2] = a;
            num++;
        }
        if (is_valid_date(c, a, b) && a != c && b != c)
        {
            valid_date[num][0] = c;
            valid_date[num][1] = a;
            valid_date[num][2] = b;
            num++;
        }
        if (is_valid_date(c, b, a) && a != c && a != b) {
            valid_date[num][0] = c;
            valid_date[num][1] = b;
            valid_date[num][2] = a;
            num++;
        }
        if (num == 0) 
            printf("Invalid Date!");
        else {
            printf("%d\n", num);
            for (num--; num >= 0; num--) {
                printf("%04d-%02d-%02d", valid_date[num][0], valid_date[num][1], valid_date[num][2]);
                if (num)  printf("\n");
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 已采纳回答 9月14日
  • 创建了问题 9月11日

悬赏问题

  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding