Python竞赛题目解题思路分享

        最近看到网上有放出来Python的竞赛的题目,截取一段题目来思考和做一做,一来巩固Python的语法知识,二来加强自己职业技能的训练。最重要的是解题思维的锻炼,坚持每周写一篇技术文章的稿子,加强自身学习的动力。下列分享一些解题的思路。附属在代码里面,进行讲解。

Python竞赛题目解题思路分享_第1张图片

解题思路:使用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)

 执行结果:Python竞赛题目解题思路分享_第2张图片

 Python竞赛题目解题思路分享_第3张图片

 解题思路:先定义矩阵列表,从矩阵中抽取几行几列的数值进行叠加,使用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)

执行结果:

Python竞赛题目解题思路分享_第4张图片

Python竞赛题目解题思路分享_第5张图片

解题思路:使用时间函数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)

 执行结果:

Python竞赛题目解题思路分享_第6张图片

 Python竞赛题目解题思路分享_第7张图片

 解题思路:观察斜对角,发现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竞赛题目解题思路分享_第8张图片

 

你可能感兴趣的:(python开发,python,python,开发语言)