应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

python蓝桥杯2021省赛A组

6670人阅读 2022/12/30 11:25 总访问:5194170 评论:0 收藏:0 手机
分类: Python

试题A-卡片

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝有很多数字卡片,每张卡片上都是数字0到9
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了
小蓝想知道自己能从 1拼到多少
例如,当小蓝有 30 张卡片,其中0到9各3张,则小蓝可以拼出1到10但是拼 11 时卡片1已经只有一张了,不够拼出 11。现在小蓝手里有0到9的卡片各 2021张,共 20210张,请问小蓝可以从 1拼到多少?

提示:建议使用计算机编程解决问题。

运行限制

最大运行时间:1s
最大运行内存: 128M


解法1:把拥有的数根据出来在匹配

  1. import sys
  2. ## 先构建0,9的组合
  3. numblist = []
  4. for j in range(0,2021):
  5. for i in range(0,10):
  6. numblist.append(i)
  7. ## print(numblist)
  8. calnumber = 1
  9. while True:
  10. for item in str(calnumber):
  11. itemint = int(item)
  12. ## 说明在我们的卡片中能找到这个数
  13. if itemint in numblist:
  14. ## 找到之后把这个卡片拿出来
  15. numblist.remove(itemint)
  16. ## 找不到就说明需要的卡片不够了,说明最多只能拼到当前这个数
  17. else:
  18. print(calnumber-1)
  19. ## 直接退出程序
  20. sys.exit()
  21. calnumber = calnumber+1


解法2:拼这些数字,最先不够的就是1,所以只需要判断1用完的时候就是结果了

  1. ## 能拼数字的上限其实是1最先用完的时候,因为所有数字1最先用完
  2. calnumber = 1
  3. use_one_count = 0
  4. ## 直接一个死循环计算1用了的次数
  5. isFind = True
  6. while isFind:
  7. for item in str(calnumber):
  8. itemint = int(item)
  9. ## 计算1用了的次数
  10. if(itemint==1):
  11. use_one_count = use_one_count+1
  12. ## 用的次数到了2021就退出
  13. if(use_one_count==2021):
  14. isFind = False
  15. break
  16. calnumber = calnumber+1
  17. print(calnumber-1)

试题F-时间显示

小蓝要和朋友合作开发一个时间显示的网站
在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从1970年1月1日 00:00:00到当前时刻经过的毫秒数现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入描述
输入一行包含一个整数,表示时间。
输出描述
输出时分秒表示的当前时间,格式 HH: MM: SS ,其中 表示时,值为0到 23,表示分,值为0到 59,S5表示秒,值为0到 59时、分、秒不足两位时补前导0。

输入输出样例

示例1

输入

  1. 46800999

输出

  1. 13:00:00

示例2

输入

  1. 1618708103123

输出

  1. 01:08:23


解法1:直接把除掉天之后的秒数来计算时分秒

  1. ## n = 1618708103123
  2. n =(int)(input())
  3. ## 舍去毫秒,转化为秒
  4. n = n//1000
  5. ######## 计算除掉天剩下的秒数
  6. ## 计算一天的秒数
  7. daySeconds = 24*60*60
  8. ## 计算除掉天剩下的秒数(不足一天的秒数),直接取模即可
  9. restSeconds = n%daySeconds
  10. ## print(restSeconds)
  11. ######## 计算小时数
  12. hour = restSeconds//(60*60)
  13. ## 计算除掉小时剩下的秒数(不足一小时的秒数)
  14. restSeconds = restSeconds%(60*60)
  15. ######## 计算分钟数
  16. minute = restSeconds//(60)
  17. ## 计算除掉分钟剩下的秒数(不足一分钟的秒数)
  18. restSeconds = restSeconds%(60)
  19. ## print(hour,minute,restSeconds)
  20. print("%02d:%02d:%02d"%(hour,minute,restSeconds))


解法2:直接利用python的timedelta函数来计算

  1. from datetime import datetime, timedelta
  2. start = datetime(year=1970, month=1, day=1)
  3. dela = timedelta(milliseconds=1)
  4. now = 1618708103123
  5. now = start + now * dela
  6. #print(now)
  7. print('%02d:%02d:%02d' % (now.hour, now.minute, now.second))

试题 H: 杨辉三角形

问题描述

下面的图形是著名的杨辉三角形:

如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:
1, 1, 1, 1, 2,1,1, 3, 3,1, 1, 4, 6, 4, 1, …
给定一个正整数 N,请你输出数列中第一次出现 N 是在第几个数?

[输入格式]

输入一个整数 N。

[输出格式]

输出一个整数代表答案。

[样例输入]

6

[样例输出]

13

评测用例规模与约定

对于 20的评测用例,1<N <10; 对于所有评测用例,1<N1000000000

运行限制

最大运行时间: 1s
最大运行内存:256M


解法1:利用二项式定理来生成杨辉三角形,然后遍历匹配

利用二项式定理来生成杨辉三角形:

  1. def CalNResult(n):
  2. result = 1
  3. for i in range(1,n+1):
  4. result=result*i
  5. return result
  6. def CalNumberByLine(n):
  7. resultList = []
  8. for r in range(0,n):
  9. caln = n-1
  10. result = CalNResult(caln)//(CalNResult(r)*CalNResult(caln-r))
  11. resultList.append(result)
  12. return resultList

当然生成方法有很多,比如递归就可以很简洁,这里我们先用二项式定理生成

然后遍历匹配即可得解:

  1. ## 需要找的数
  2. n = 15
  3. ## 找的次数
  4. findcount = 0
  5. line = 1
  6. while True:
  7. resultList = CalNumberByLine(line)
  8. for j in range(0,len(resultList)):
  9. ## print(resultList[j])
  10. ## 每找一次就加1
  11. findcount = findcount+1
  12. if resultList[j]== n:
  13. print(findcount)
  14. sys.exit()
  15. line = line+1

当然上面的解法计算量太大了,肯定是不好的。其实我们可以使用二分查找发,或者是我们可以找到要找的这个数在哪一行的话,直接就生成哪一行的数字匹配就行了,这里就要涉及到二项式极值的计算,简化算法下次直播在说。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

python实例 1-日志抓取处理 补错(附日志小技巧)

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

python数据集合区别

列表(list):可读写,值可以重复,有序排列,初始化语法:[&#39;tom&#39;,‘jerry’]元组(tuple):只读,值可以重复,...

python实例 2-12306抢票(二) 下单

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

使用VS Code开发python

Vs Code开发Python可以很好的支持代码调试、智能提示、代码对齐等1:下载VS Codehttps://code.visualstudio.com/Downloadvs ...

python变量与命名

Python使用等号 ( = ) 作为赋值运算符,例如a = 66 就是一条赋值语句,作用就是将66赋值给变量a。Python是弱类型语言,弱类...

python关键字和内置函数

Python中包含了如下所示的关键字:上面这些关键字都不能作为变量名。另外,Python 3还提供了如下表所示的内置函数:也不能...

python基础输入和输出

Python使用print()函数向打印程序输出,采用input()函数接收程序输入。print()函数的语法格式如下:print(value,...,sep=&#...

python基本数据类型

Python包含两大类基本数据类型:数值类型、字符串类型,三大类组合数据类型:集合类型、序列类型和字典类型.数值类型:整型...

python中通过fAke_userAgent生成随机UserAgent

fake_useragent第三方库,来实现随机请求头的设置;GitHub ---&gt; https://github.com/hellysmile/fake-useragent安...

python 升级pip

一条命令即可: python -m pip install --upgrade pip 安装成功后,一般是在python目录下面的Scripts里边的

python html编码解码

使用方法:html.escape(s)与html.unescape即可 import html s=&quot;&lt;div&gt;jsdlfjsl&lt;/div&gt;&quot; #html编...