ԅ(¯ㅂ¯ԅ)。436 2023-03-29 14:49 采纳率: 83.3%
浏览 15
已结题

关于#日期#的问题,如何解决?

日期问题

img

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool check(int y, int m, int d) {//判断日期是否合法
    if (m == 0 || m > 12) return false;
    if (d == 0)return false;
    if (m != 2 && d > days[m]) return false;
    if (m == 2) {
        int lerp = y % 100 != 0 && y % 4 == 0 || y % 400 == 0;//闰年lerp=1,平年0
        if (d > 28 + lerp) return false;
    }
    return true;
}
int main() {
    int a, b, c;
    scanf_s("%d/%d/%d", &a, &b, &c);
    for (int i = 19600101; i <= 20591231; i++) {//枚举1960.01.01-2059.12.31所有日期
        int y = i / 10000 ;
        int m = i / 1000000 % 100;
        int d = i % 100;
        if (check(y, m, d)) {//判断日期是否合法
            if (((y % 100) == a && m == b && d == c) || (d == a && m == b && (y % 100) == c) || (m == a && d == b &&(y % 100)== c))
            {
                printf("%d-%02d-%02d\n", y, m, d);
            }
        }
    }
    return 0;
}

不知道错哪里了,没有输出

  • 写回答

3条回答 默认 最新

  • ԅ(¯ㅂ¯ԅ)。436 2023-03-30 15:22
    关注

    修改后的

    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    bool check(int y, int m, int d) {//判断日期是否合法
        if (m == 0 || m > 12) return false;
        if (d == 0) return false;
        if (m != 2 && d > days[m]) return false;
        if (m == 2) {
            int lerp = y % 100 != 0 && y % 4 == 0 || y % 400 == 0;//闰年lerp=1,平年0
            if (d > 28 + lerp) return false;
        }
        
        return true;
    }
    int main() {
        int a, b, c;
        scanf_s("%d/%d/%d", &a, &b, &c);
        for (int i = 19600101; i <= 20591231; i++) {//枚举1960.01.01-2059.12.31所有日期
            int y = i / 10000 ;
            //int m = i / 1000000 % 100;
            int m = i % 10000 / 100;
            int d = i % 100;
            if (check(y, m, d)) {//判断日期是否合法
                if (((y % 100) == a && m == b && d == c) || 
                    (d == a && m == b && (y % 100) == c) ||
                    (m == a && d == b &&(y % 100)== c))
                {
                    printf("%d-%02d-%02d\n", y, m, d);
                }
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月29日

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图