蓝桥杯-“山”形数字个数(python版)

问题描述

这天小明正在学数数。


他突然发现有些整数的形状像一座“山”,比123565321、145541,它们左右对称(回文)且数位上的数字先单调不减,后单调不增


小朋数了很久也没有数完,他想让你告诉他在区间[2022,2022222022]中有多少个数的形状像一座“山”。

思路解答

首先暴力求解会超时,至少10分钟(参考他人运行时间)

所以必须找捷径

山形数字条件有两个,一个是回文,一个是单调性

对于回文,因为是对称的(类似照镜子),所以我们只需要对一半数字考虑单调性

对于区间[2022,2022222022]中的数,我们只需要考虑到区间[2222,199999991],所以对半区间是[22,19999]

代码如下:

#左闭右开区间
for s in range(22, 20000): 
    s = str(s)
    flag = True
    #判断单调性
    for i in range(len(s)-1):
        if s[i] > s[i+1]:
            flag = False
            break
    if flag:
        count += 1

注意:

这段代码只考虑了山形数的位数是偶数的情况,例如2332,56788765,而没有12321这种

所以对于山形数位数为奇数时我们需要再分析

例如:12221,取前两位12,奇数位的数有12221、12321、12421、12521、12621、12721、12821、12921,【2~9,即9-2+1个,加1是因为2本身也是可以满足条件的】即有10-2(奇数位上的数字)

对于区间,奇数位是从5位(11111)开始,到9位(999999999)结束,所以遍历的区间为[11,9999]

代码如下:

#左闭右开区间
for s in range(11, 10000): 
    s = str(s)
    flag = True
    #判断单调性
    for i in range(len(s)-1):
        if s[i] > s[i+1]:
            flag = False
            break
    if flag:
        count += 10 - int(s[i+1])

完整代码

import os
import sys

count = 0
for s in range(22, 20000):  # 位数为偶数
    s = str(s)
    flag = True
    for i in range(len(s)-1):
        if s[i] > s[i+1]:
            flag = False
            break
    if flag:
        count += 1
for s in range(11, 10000):  # 位数为奇数
    s = str(s)
    flag = True
    for i in range(len(s)-1):
        if s[i] > s[i+1]:
            flag = False
            break
    if flag:
        count += 10 - int(s[i+1])
print(count)

最后结果:3138 

相关推荐

  1. -“数字个数python

    2024-02-08 01:02:01       34 阅读
  2. 基础数论Python组)

    2024-02-08 01:02:01       19 阅读
  3. 练习题 —— Fibonacci数列python

    2024-02-08 01:02:01       14 阅读
  4. 刷题--python-33-树状数组

    2024-02-08 01:02:01       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-08 01:02:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-08 01:02:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-08 01:02:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-08 01:02:01       18 阅读

热门阅读

  1. Xilinx FPGA——在线升级

    2024-02-08 01:02:01       33 阅读
  2. 【力扣hot100】刷题笔记Day4

    2024-02-08 01:02:01       36 阅读
  3. SpringBoot实现即时通讯

    2024-02-08 01:02:01       24 阅读
  4. Centos7部署MetaBase-v0.48.3

    2024-02-08 01:02:01       32 阅读
  5. 【力扣】复写零,栈+双指针法

    2024-02-08 01:02:01       31 阅读
  6. LeetCodeLCR 114. 火星词典——拓扑排序

    2024-02-08 01:02:01       32 阅读
  7. Kylin系统下Qt的各种中文问题解决思路

    2024-02-08 01:02:01       33 阅读
  8. 1755. 最接近目标值的子序列和

    2024-02-08 01:02:01       32 阅读
  9. zstd字典压缩的大数据生产实践 & ctf逆向出题启发

    2024-02-08 01:02:01       28 阅读
  10. typedef 与#define 的概念及区别?

    2024-02-08 01:02:01       31 阅读
  11. 工具--Git详解

    2024-02-08 01:02:01       34 阅读
  12. MySQL数据库基础与SELECT语句使用梳理

    2024-02-08 01:02:01       25 阅读