小学生蓝桥杯Python闯关 | 山

学习Python从娃娃抓起!记录下蓝桥杯Python学习和备考过程中的题目,记录每一个瞬间。

附上汇总贴:小学生蓝桥杯Python闯关 | 汇总_COCOgsta的博客-CSDN博客


【题目描述】

这天小明正在学数数。他突然发现有些正整数的形状像一座“山”,如123565321、145541,它们左右对称(回文)且数位上的数字先单调不减,后单调不增。小明数了很久也没有数完,他想让你告诉他在[2022, 2022222022]中有多少个数的形状像一座“山”。

【代码详解】

ans = 0
for i in range(20,20223):     #(1)回文串长度为偶数,右半边是左半边的翻转
    flag = 1
    s = str(i)
    for i in range(0,len(s)-1):  #判断左半边的单调性
       if s[i]>s[i+1]:           #非单调不减
           flag = 0              # = 0:不合法
           break
    if flag == 1: ans += 1    #得到了左半边,可以构造一个“山”数
for i in range(11,10000):     #[11,9999]。(2)回文串长度为奇数,中间数不小于左右两边
    flag = 1
    s = str(i)
    for i in range(0,len(s)-1):
       if s[i]>s[i+1]:
           flag = 0
           break
    if flag == 1:    ans += 10-int(s[i+1])
print(ans)                        #输出3138
复制代码

【运行结果】

3138

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/129851947