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

举报
府学路18号车神 发表于 2022/03/03 20:38:00 2022/03/03
【摘要】 每天刷一道题,话不多说,先刷近两年的题吧,从2020的开始,如果有一起的可以加入我们!!!一起来刷题,冲击国赛!!! 2020年第十一届蓝桥杯赛题总览2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题! 寻找2020(题目)(本题总分:5分)—>【问题描述】小蓝有一个数字矩阵,里面只包含数字。和2。小蓝很喜欢2020,他想找 到这个数字矩阵中有多少个...

每天刷一道题,话不多说,先刷近两年的题吧,从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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。