栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day02 | 寻找2020 | 真题代码解析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day02 | 寻找2020 | 真题代码解析

作者简介:大家好,我是车神哥,府学路18号的车神磊
⚡about—>车神:从寝室到实验室最快3分钟,最慢3分半(那半分钟其实是等绿
个人主页:应无所住而生其心的博客_府学路18号车神_CSDN博客
磊 官方认证:人工智能领域优质创作者
点赞评论收藏 == 养成习惯(一键三连)

⚡希望大家多多支持珞~一起加油 

专栏

《蓝桥杯-Python》


每天刷一道题,话不多说,先刷近两年的题吧,从2020的开始,如果有一起的可以加入我们!!!

一起来刷题,冲击国赛!!!


由于限制不能直接分享二维码。或者扫码网页左边群二维码。

加入方式:可以在下方的微信名片加我,然后拉你入群。(记得备注暗号:我要拿国奖)


2020年第十一届蓝桥杯赛题总览

2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题!

寻找2020(题目)

(本题总分:5分)


—>【问题描述】

小蓝有一个数字矩阵,里面只包含数字。和2。小蓝很喜欢2020,他想找 到这个数字矩阵中有多少个2020。

小蓝只关注三种构成2020的方式:
・同一行里面连续四个字符从左到右构成2020。
・同一列里面连续四个字符从上到下构成2020。
・在一条从左上到右下的斜线上连续四个字符,从左上到右下构成2020。

例如,对于下面的矩阵:

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

一共有5个2020。其中1个是在同一行里的,1个是在同一列里的,3个 是斜线上的。

小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一 个文件里面,在试题目录下有一个文件2020.txt,里面给出了小蓝的矩阵。

请帮助小蓝确定在他的矩阵中有多少个2020。


—>【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


解析

通过阅读题干,本题——难度一般:⭐⭐

由于是填空题,我们只需要得出一个结果即可。结果为一个整数。可以用暴力求解(简单易用,没毛病)。

首先,由于比赛时候会提供**.txt文件,所有我们需要对文件进行读取操作(已经放在代码前面,比赛时候记得用)。目前没有文件,我们就利用原题中的示例进行实现。暴力求解,直接对数组矩阵进行遍历求解(比较容易想到的方法)。对行**、列、对角线依次进行遍历查找一遍即可。


代码

Python代码实现:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/2/25 14:50
# @Author  : 府学路18号车神
# @Email   :yurz_control@163.com
# @File    : Day02.py

import pandas as pd

"""
下面是打开文件的,由于原题中给了.txt的文件,所以需要我们操作打开读取文件,将文件内容读取到列表中
"""
# file = open("1.txt", "r")      # 利用open()打开文件,并赋值给file
# ls = file.read().split('n')    # 利用 .split换行分割字符串
# m = len(ls)    # 读取矩阵的行数
# n = len(ls[0])  # 读取矩阵的列数

"""
以下为无.txt文件版本,比赛的时候只需要执行上面的文件读取操作即可
"""

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"]]    # 题干中的示例

res = 0     # 设置计数器
# 依次遍历,先从行开始遍历一遍
for x in range(len(nums)):    # 行
    temp = "".join(nums[x])     # 将列表的字符变为字符串
    if "2020" in temp:      # 如果“2020”在字符串内则计数+1
            res += 1

# 对列进行操作
for i in range(len(nums) - 3):  # 外层循环
    for j in range(len(nums)):  # 内层循环
        if nums[i][j] == "2" and nums[i + 1][j] == "0" and nums[i + 2][j] == "2" and nums[i + 3][j] == "0":
            res += 1

# 对角线操作
for i in range(len(nums)-3):
    for j in range(len(nums)-3):
        if nums[i][j]=="2" and nums[i+1][j+1]=="0" and nums[i+2][j+2]=="2" and nums[i+3][j+3]=="0":
            res += 1

print("请问有多少个2020?:", res)      # 得到共有5个2020

由此,我们可以快速的出结果为:5


今天开刷第二天,难度一般,欢迎大家加入,一起变强,一起自律,一起上国赛!!!

有不同解法的可以在下面留言哦!~


❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!冲击国赛
To Be No.1

⚡⚡


⚡创作不易⚡,过路能❤关注收藏点个赞❤三连就最好不过了

ღ( ´・ᴗ・` )

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号