ԅ(¯ㅂ¯ԅ)。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 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥15 抖音看过的视频,缓存在哪个文件