当前位置:   article > 正文

Python竞赛题目解题思路分享_python解题思路

python解题思路

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

解题思路:使用python字符串中count函数方法进行统计。

  1. # -*- conding:utf-8 -*-
  2. #需求1:统计1-2020的数字列表中使用2数字一共有多少次。
  3. n = 0
  4. for i in range(1,2021):
  5. a = str(i)
  6. n += a.count("2")
  7. print(n)

 执行结果:

 

 解题思路:先定义矩阵列表,从矩阵中抽取几行几列的数值进行叠加,使用X*1000(位数)方法进行叠加。注意抽取行数或者列数不能超过总行数或者总列数。比如总行数有6行,取值不能超过总行数,总列数是6列,不能超过总列数。遍历每i行,只要j+4<=总列数。遍历每j行,只要i+3<=总行数,斜边计算i+3 <总行数,j+3<总行数。注意按行取值出来是数值,按照列取值出来可能是列表。所以匹对值也要注意。

  1. nums = [[2, 2, 0, 0, 0, 0],
  2. [0, 0, 0, 0, 0, 0],
  3. [0, 0, 2, 2, 0, 2],
  4. [0, 0, 0, 0, 0, 0],
  5. [0, 0, 0, 0, 2, 2],
  6. [0, 0, 2, 0, 2, 0],
  7. ]
  8. print("矩阵行数:",len(nums),"矩阵列数:",len(nums[0]))
  9. res = 0
  10. for i in range(len(nums)):#取行数
  11. for j in range(len(nums[0])):#取列数
  12. if j+4 <= len(nums[0]):#取行数小于总列数
  13. a = nums[i][j:j+4]
  14. if a == [2,0,2,0]:#取值出来是列表
  15. res += 1
  16. if i+3 < len(nums):#取值列数小于总行数
  17. b = nums[i][j]*1000 + nums[i+1][j]*100 +nums[i+2][j]*10 + nums[i+3][j]
  18. if b == 2020:
  19. res += 1
  20. if i+3 < len(nums) and j+3 < len(nums[0]):#取倾斜列的数值
  21. c = nums[i][j]*1000 + nums[i+1][j+1]*100 +nums[i+2][j+2]*10 + nums[i+3][j+3]
  22. if c == 2020:
  23. res += 1
  24. print("矩阵中2020的计数:",res)

执行结果:

解题思路:使用时间函数datetime来解决这个问题,定义两个日期的赋值,使用day方法,确定1号,使用isoweekday方法确定确定周一,然后两个循环遇到就增加2km,每天都是安装1km增加。排除特殊情况即是周一也是1号的情况。

  1. import datetime
  2. a = datetime.date(2020,1,1)
  3. b = datetime.date(2022,10,1)
  4. res = 0
  5. while True:
  6. if a == b :break
  7. if a.day == 1:#如果是1号情况下
  8. res+=2
  9. a = a + datetime.timedelta(days=1)#使用函数间隔1天
  10. continue
  11. if a.isoweekday() == 1:#如果是周一情况下
  12. res+=2
  13. a = a +datetime.timedelta(days=1)
  14. continue
  15. res += 1
  16. a = a + datetime.timedelta(days=1)
  17. 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.

  1. #判断蛇形填数第20行第20列的数值
  2. res = 1
  3. for i in range(1,20):
  4. res += i*4
  5. print("蛇形填数的第二十行第二十列是:",res)

执行结果为:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/485982
推荐阅读
相关标签
  

闽ICP备14008679号