当前位置: 首页 > news >正文

洛谷 P2010 [NOIP 2016 普及组] 回文日期 Python

方法一:

不知道为什么无法通过Subtask #1,明明试了结果正确(如果有人知道希望可以告诉我下)

start = input()
end = input()
count = 0
mark_y = 0 #用来标记是否为起始年
mark_m = 0 #用来标记是否为起始月

for i in range(int(start[0:4]),int(end[0:4])+1):
    year = 0

    if int((str(i)[0:2])[::-1]) > 31 or int((str(i)[2:4])[::-1]) >12 :
        #年份的第一、二位数倒过去就表示日期,第三、四位数表示月份。先判断倒过来是不是合法日期
        mark_y = 1 #为标记赋值,表示已经跳过起始年
        mark_m = 1
        continue#跳过后面的代码进入下一次循环

    if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:#判断是否为闰年
        year = 1

    if mark_y == 0:#判断是否为起始年份,如果是起始年份月要从给定月份开始,不是就从1月开始
        j_star = int(start[4:6])
        mark_y = 1
    else:
        j_star = 1

    for j in range(j_star,13):

        if mark_m == 0:#判断是否为起始月,如果是日期就要从给定日期开始
            k_star = int(start[6:8])
            mark_m = 1
        else:
            k_star = 1

        if j in(1,3,5,7,8,10,12):
            day = 31
        elif j in(4,6,9,11):
            day = 30
        else:
            day = 28 + year

        if j < 10 :
                j = "0"+str(j)

        for k in range(k_star,day+1):
        #for k in range(1,day+1):

            if k < 10 :
                k = "0"+str(k)#格式化数字,为一位数前面加0
            date = str(i)+str(j)+str(k)
            r_date = date[::-1]#使字符串反向排序

            if date == r_date:
                count += 1

            #if date == r_date and int(start) <= int(date) <= int(end):
            #    count += 1

            if date == end:
                print(count)
                exit()
print(count)

 方法一改:ac了,更改部分为方法一中日期k循环中注释掉的代码

start = input()
end = input()
count = 0
mark_y = 0 #用来标记是否为起始年
mark_m = 0 #用来标记是否为起始月

for i in range(int(start[0:4]),int(end[0:4])+1):
    year = 0

    if int((str(i)[0:2])[::-1]) > 31 or int((str(i)[2:4])[::-1]) >12 :
        #年份的第一、二位数倒过去就表示日期,第三、四位数表示月份。先判断倒过来是不是合法日期
        mark_y = 1 #为标记赋值,表示已经跳过起始年
        mark_m = 1
        continue#跳过后面的代码进入下一次循环

    if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:#判断是否为闰年
        year = 1

    if mark_y == 0:#判断是否为起始年份,如果是起始年份月要从给定月份开始,不是就从1月开始
        j_star = int(start[4:6])
        mark_y = 1
    else:
        j_star = 1

    for j in range(j_star,13):

        if mark_m == 0:#判断是否为起始月,如果是日期就要从给定日期开始
            k_star = int(start[6:8])
            mark_m = 1
        else:
            k_star = 1

        if j in(1,3,5,7,8,10,12):
            day = 31
        elif j in(4,6,9,11):
            day = 30
        else:
            day = 28 + year

        if j < 10 :
                j = "0"+str(j)

        for k in range(1,day+1):

            if k < 10 :
                k = "0"+str(k)#格式化数字,为一位数前面加0
            date = str(i)+str(j)+str(k)
            r_date = date[::-1]#使字符串反向排序

            if date == r_date and int(start) <= int(date) <= int(end):
                count += 1

            if date == end:
                print(count)
                exit()
print(count)

方法二:简化了代码且ac,但是耗时似乎增加了

start = input()
end = input()
day =[0,31,28,31,30,31,30,31,31,30,31,30,31]
count = 0

for i in range(int(start[0:4]),int(end[0:4])+1):
    if int((str(i)[0:2])[::-1]) > 31 or int((str(i)[2:4])[::-1]) >12 :
        #年份的第一、二位数倒过去就表示日期,第三、四位数表示月份。先判断倒过来是不是合法日期
        continue#跳过后面的代码进入下一次循环

    if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:#判断是否为闰年
        day[2] = 29
    else:
        day[2] = 28

    for j in range(1,13):
        for k in range(1,day[j]+1):

            date = f"{i:04d}{j:02d}{k:02d}"#格式化年月日,位数不足在前补0
            r_date = date[::-1]#使字符串date反序

            if date == r_date and int(start) <= int(date) <= int(end):
                 count += 1

print(count)

相关文章:

  • RocketMQ 详细教程(Spring Boot Spring Cloud Alibaba)
  • 靶场练习ing
  • 【A2DP】蓝牙A2DP协议剖析:从架构到规范
  • Linux进程基础知识
  • APIC 是什么?深度解析高级可编程中断控制器
  • Redis-配置文件
  • 【论文精读】Deformable DETR:用于端到端目标检测的可变形 Transformer
  • [Ai 力扣题单] 数组基本操作篇 27/704
  • 深陷帕金森困境,怎样重燃生活信心?
  • 基于 Vue 的Deepseek流式加载对话Demo
  • 网络安全基础知识:从零开始了解网络安全
  • 【网络协议】应用层协议HTTPS
  • C语言学习笔记-进阶(10)自定义类型:结构体
  • # linux有哪些桌面环境?有哪些显示服务器协议及显示服务器?有哪些用于开发图形用户界面的工具包?
  • 消息队列MQ使用场景有哪些?
  • 【VS+Qt】VS中编辑Qt中ui界面,代码中未更新
  • 如何在前后端分离项目当中调用星火大模型实现AI问答模块设计?前后端点亮星火:Vue+Node 全链路打通 AI 问答系统
  • 运维AI自动化配置的方案选型
  • Ubuntu 24.04 安装与配置 JetBrains Toolbox 指南
  • 【网络安全工程】任务12:网络安全设备
  • 教你用模板做网站/北京seo包年
  • 怎样把自己做的网站发布/武汉百度网站优化公司
  • 网站怎么做交易/网站的排名优化怎么做
  • 重庆市官网首页/杭州最好的seo公司
  • 用dw做音乐网站模板/seo搜索排名
  • 公司注册网站的费用多少/汽车宣传软文