概述
最近看到网上有放出来Python的竞赛的题目,截取一段题目来思考和做一做,一来巩固Python的语法知识,二来加强自己职业技能的训练。最重要的是解题思维的锻炼,坚持每周写一篇技术文章的稿子,加强自身学习的动力。下列分享一些解题的思路。附属在代码里面,进行讲解。
解题思路:使用python字符串中count函数方法进行统计。
# -*- conding:utf-8 -*-
#需求1:统计1-2020的数字列表中使用2数字一共有多少次。
n = 0
for i in range(1,2021):
a = str(i)
n += a.count("2")
print(n)
执行结果:
解题思路:先定义矩阵列表,从矩阵中抽取几行几列的数值进行叠加,使用X*1000(位数)方法进行叠加。注意抽取行数或者列数不能超过总行数或者总列数。比如总行数有6行,取值不能超过总行数,总列数是6列,不能超过总列数。遍历每i行,只要j+4<=总列数。遍历每j行,只要i+3<=总行数,斜边计算i+3 <总行数,j+3<总行数。注意按行取值出来是数值,按照列取值出来可能是列表。所以匹对值也要注意。
nums = [[2, 2, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 2, 2, 0, 2],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 2, 2],
[0, 0, 2, 0, 2, 0],
]
print("矩阵行数:",len(nums),"矩阵列数:",len(nums[0]))
res = 0
for i in range(len(nums)):#取行数
for j in range(len(nums[0])):#取列数
if j+4 <= len(nums[0]):#取行数小于总列数
a = nums[i][j:j+4]
if a == [2,0,2,0]:#取值出来是列表
res += 1
if i+3 < len(nums):#取值列数小于总行数
b = nums[i][j]*1000 + nums[i+1][j]*100 +nums[i+2][j]*10 + nums[i+3][j]
if b == 2020:
res += 1
if i+3 < len(nums) and j+3 < len(nums[0]):#取倾斜列的数值
c = nums[i][j]*1000 + nums[i+1][j+1]*100 +nums[i+2][j+2]*10 + nums[i+3][j+3]
if c == 2020:
res += 1
print("矩阵中2020的计数:",res)
执行结果:
解题思路:使用时间函数datetime来解决这个问题,定义两个日期的赋值,使用day方法,确定1号,使用isoweekday方法确定确定周一,然后两个循环遇到就增加2km,每天都是安装1km增加。排除特殊情况即是周一也是1号的情况。
import datetime
a = datetime.date(2020,1,1)
b = datetime.date(2022,10,1)
res = 0
while True:
if a == b :break
if a.day == 1:#如果是1号情况下
res+=2
a = a + datetime.timedelta(days=1)#使用函数间隔1天
continue
if a.isoweekday() == 1:#如果是周一情况下
res+=2
a = a +datetime.timedelta(days=1)
continue
res += 1
a = a + datetime.timedelta(days=1)
print("总计跑的千米数km:",res)
执行结果:
解题思路:观察斜对角,发现1行1列、2行2列、3行3列,第二个参数是第一个参数用数值+行数*4,比如1、5、13、25.....规律可循:1+1*4=5、5+2*4=13、13+3*4=25.
#判断蛇形填数第20行第20列的数值
res = 1
for i in range(1,20):
res += i*4
print("蛇形填数的第二十行第二十列是:",res)
执行结果为:
最后
以上就是自然龙猫为你收集整理的Python竞赛题目解题思路分享的全部内容,希望文章能够帮你解决Python竞赛题目解题思路分享所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复