蓝桥杯寒假集训第九天(回文日期)

news/2025/1/11 22:24:39/

没有白走的路,每一步都算数🎈🎈🎈

题目描述:

输入一行数据,这个数据是从10000101到89991231,输出这个数据后面的第一个回文数,以及输出第一个ABABBABA型的回文数。

注意:这两个回文数可以相同。这个题目的题意应该说明一下。

输入描述:

第一行:

第一行输入一个八位数

输出描述:

输出两个数据,一个是这个数字后面的回文数,样式没有要求。

另外一个是这个数字后面的回文数,但是样式有要求。要求格式位ABABBABA型的数字。

样例输入输出:

样例输入:

20200202
样例输出:

20211202

21211212

算法思路:

由于年份很少,题目只给出8位的数字,我们构建出所有的回文年份的前面四位数字。反正用的是模拟,接着用for循环遍历所有的前面的四位数字,判断这个前面四个数字所衍生出来的回文数,是不是大于这个输入的数据,如果是,就输出。第二个数,就是直接在if条件加一个限制。

 找到第一个回文数

思路:先把前面的四位数提取出来,之后用暴力法,找到我们的数组中第一个大于等于这个四位数的数组的下标,之后输出这个数据。

 题目仍然提示有部分代码没有通过,看到这里出现了重复的情况

不断测试,找到bug

 

 

 这里要求的是ABABBABA,那么11111111不应该存在,if条件出错。改完之后,仍旧是90%的通过率,所以只能采取对拍操作,把AC的代码和自己的代码的每个结果输出,做个对比。

import os
import sys
##while 1:
n = int(input())
Y = [10,11,12,13,20,21,22,30,31,32,40,41,42,50,51,52,60,61,62,70,71,72,80,81,82,90,91,92]
M = [1,10,11,20,21,30,40,50,60,70,80,90]##x = len(Y)*len(M)*[0]##print(len(Y))##print(x)
x = []
y = [0,0,0,0]
ans = ''
for i in range(len(Y)):if Y[i]==13:for j in range(len(M)):if M[j] == 11 or M[j] == 20 or M[j]==40 \or M[j]==60 or M[j]== 90:x.append(0)else:x.append(Y[i]*100+M[j])elif Y[i]==82:for j in range(len(M)):if M[j]==20:x.append(0)else:x.append(Y[i]*100+M[j])else:for j in range(len(M)):x.append(Y[i]*100+M[j])
##print(x)
##print(len(x))
##for i in range(len(x)):
##    print(x[i],end = ' ')
##    if (i+1)%10==0:
##        print()for i in range(len(x)):
##    print(n//10000)if x[i]>(n//10000):
##        print(n//1000)tmp = x[i]ans+=(str(x[i]))
##        x[i] = 0for j in range(4):y[j] = tmp%10tmp = tmp//10ans+=str(y[j])print(ans)break
ans1 = ''
for i in range(len(x)):a = x[i]%10b = x[i]//10%10c = x[i]//100%10d = x[i]//1000if x[i]>(n//10000) and a==c and b == d and b!=c:tmp = x[i]ans1+=(str(x[i]))for j in range(4):y[j] = tmp%10tmp = tmp//10ans1+=str(y[j])if ans1!=ans:print(ans1)break

 对拍

正确的AC代码

错误的代码

 

 修改之后仍旧出先新错误

 再次修改

这里不应改会出现0的,因为存在82200228,最开始想到是8220的2月份有29天,所以就把这里设为0,结果翻车.

正确的代码                                                     错误的代码

 

 仍然出错,这里我想到之前的错误可能会又犯,一查,还真是,变量一多,if,else就特别容易写错。

正确的代码                                                         错误的代码

 原因:

 AC代码

 原始版

import os
import sys
##while 1:
n = int(input())
Y = [10,11,12,13,20,21,22,30,31,32,40,41,42,50,51,52,60,61,62,70,71,72,80,81,82,90,91,92]
M = [1,10,11,20,21,30,40,50,60,70,80,90]##x = len(Y)*len(M)*[0]##print(len(Y))##print(x)
x = []
y = [0,0,0,0]
ans = ''
for i in range(len(Y)):if Y[i]==13:for j in range(len(M)):if M[j] == 11 or M[j] == 20 or M[j]==40 \or M[j]==60 or M[j]== 90:x.append(0)else:x.append(Y[i]*100+M[j])
##    elif Y[i]==82:
##        for j in range(len(M)):
##            if M[j]==20:
##                x.append(0)
##            else:
##                x.append(Y[i]*100+M[j])else:for j in range(len(M)):x.append(Y[i]*100+M[j])
##print(x)
##print(len(x))
##for i in range(len(x)):
##    print(x[i],end = ' ')
##    if (i+1)%10==0:
##        print()for i in range(len(x)):
##    print(n//10000)if x[i]>=(n//10000):
##        print(n//1000)tmp = x[i]ans+=(str(x[i]))
##        x[i] = 0for j in range(4):y[j] = tmp%10tmp = tmp//10ans+=str(y[j])if int(ans)>n:print(ans)breakelse:ans = ''
##print(x)
ans1 = ''
for i in range(len(x)):a = x[i]%10b = x[i]//10%10c = x[i]//100%10d = x[i]//1000if x[i]>=(n//10000) and a!=b and b == d and a==c:tmp = x[i]ans1+=(str(x[i]))for j in range(4):y[j] = tmp%10tmp = tmp//10ans1+=str(y[j])if int(ans1)>n:print(ans1)breakelse:ans1 = ''

修正的代码

import os
import sys
n = int(input())
Y = [10,11,12,13,20,21,22,30,31,32,40,41,42,50,51,52,60,61,62,70,71,72,80,81,82,90,91,92]
M = [1,10,11,20,21,30,40,50,60,70,80,90]
x = []
y = [0,0,0,0]
ans = ''
for i in range(len(Y)):if Y[i]==13:for j in range(len(M)):if M[j] == 11 or M[j] == 20 or M[j]==40 \or M[j]==60 or M[j]== 90:x.append(0)else:x.append(Y[i]*100+M[j])else:for j in range(len(M)):x.append(Y[i]*100+M[j])for i in range(len(x)):if x[i]>=(n//10000):tmp = x[i]ans+=(str(x[i]))for j in range(4):y[j] = tmp%10tmp = tmp//10ans+=str(y[j])if int(ans)>n:print(ans)breakelse:ans = ''
ans1 = ''
for i in range(len(x)):a = x[i]%10b = x[i]//10%10c = x[i]//100%10d = x[i]//1000if x[i]>=(n//10000) and a!=b and b == d and a==c:tmp = x[i]ans1+=(str(x[i]))for j in range(4):y[j] = tmp%10tmp = tmp//10ans1+=str(y[j])if int(ans1)>n:print(ans1)breakelse:ans1 = ''

彩蛋

发现蓝桥杯这道题目的测试数据还是有一点少的。举一个小案例说明:

 

每日一句

摘自《《晚熟的人》》:

晚熟的人,一般简单又纯真,看起来傻乎乎,却傻人有傻福,有着谁也抢不走的人间幸福。


http://www.ppmy.cn/news/10454.html

相关文章

Kubernetes:通过轻量化工具 kubespy 实时观察YAML资源变更

写在前面 分享一个小工具 kubespy 给小伙伴博文内容涉及: 工具的简单介绍下载安装以 kubectl 插件方式使用 Demo 理解不足小伙伴帮忙指正 我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼黑塞《德米安》 简单介…

Callable接口

目录 一、Callable接口的含义 二、Callable接口的使用 步骤一:明确执行任务的内容及其返回值 步骤二:把任务交给线程来执行 步骤三:获取任务的返回值 一、Callable接口的含义 Callable接口和runnable接口类似,本质上描述的也是任务。 但是,…

061-java中URL和HttpURLConnection使用方法详细介绍

【上一讲】060-MySQL数据库综合应用(实现登录及注册功能源代码)_CSDN专家-赖老师(软件之家)的博客-CSDN博客 【下一讲】062-TCP网络通讯ServerSocket及Socket类使用详解_CSDN专家-赖老师(软件之家)的博客-CSDN博客 在java.net包中定义了URL类,URL类封装了使用统一资源定…

WordPress 的“more”标签

隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观…

第46章 Python urllib教程

Python urllib教程 库用于操作网页 URL,并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块: urllib.request - 打开和读取 URL。urllib.error - 包含 urllib.request 抛出的异常。urllib.parse - 解析 URL。urllib.robotparser -…

十大字符串函数与内存操作函数

前言:我们知道在C语言的库中有许许多多的库函数,今天我就来介绍一下自己对两大类库函数中一些常用函数的认识和理解,希望对大家有帮助。 说明:下文中会花较大篇幅实现这些库函数的模拟,请大家不要觉得库函数直接用就好…

Jackson_annotations注解使用

1、JsonIdentityInfo 英文说明: 1、JsonIdentityInfo is used when objects have parent child relationship. JsonIdentityInfo is used to indicate that object identity will be used during serialization/de-serialization. 2、中文翻译:JsonIdentityInfo 在对…

计算机网络复习之网络层

文章目录数据报与虚电路服务的对比IP 协议IP数据报格式IP地址NAT(网络地址转换)子网划分和子网掩码在支持子网划分的因特网中,路由器如何转发IP数据报无分类编制CIDR构成超网RIP协议OSPF协议ARP协议ICMP协议Ping和Traceroute参考路由选择是网…