2018阿里笔试题一道

2018阿里笔试题一道八卦阵相传是由诸葛亮创设的一种战斗队形和兵力部署,由八种阵势组成。为了方便,采用矩阵来描述一个八卦阵,它由八个单阵组成,每个单阵由多个兵力区域组成形成一种阵势,如下图所示,其中数字为一个兵力区域的士兵个数。假设单阵与单阵之间兵力区域不会相邻,且单阵中每个兵力区域至少存在一个相邻兵力区域(注:相邻是指在其左上,正上,右上,右方,右下,正下,左下,左方与其相邻),请用最快的速度计算出八个单阵中的兵力(…

大家好,又见面了,我是你们的朋友全栈君。

八卦阵相传是由诸葛亮创设的一种战斗队形和兵力部署,由八种阵势组成。为了方便,采用矩阵来描述一个八卦阵,它由八个单阵组成,每个单阵由多个兵力区域组成形成一种阵势,如下图所示,其中数字为一个兵力区域的士兵个数。假设单阵与单阵之间兵力区域不会相邻,且单阵中每个兵力区域至少存在一个相邻兵力区域(注:相邻是指在其左上,正上,右上,右方,右下,正下,左下,左方与其相邻),请用最快的速度计算出八个单阵中的兵力(士兵个数)的最大值和最小值。

输入:
输入描述,例如:
第一行输入是八阵图的行数。
第二行输入是八阵图的列数。
后续行输入每个区域兵力。每一行的数据中间使用空格分开,当前一行输入完成后回车输入下一行数据。
输出:
输出描述,例如:
输出八个单阵中兵力最大值和最小值。
输入范例:
20
20
34  0   0   0   0   0   0   0   0   0   0   0   0   0   0   10  0   0   0   30
0   23  10  5   5   0   0   0   5   5   5   5   5   0   0   0   30  0   40  0
0   9   0   0   5   0   0   0   4   4   4   4   4   0   0   0   0   30  0   0
0   8   7   7   0   5   0   0   3   3   3   3   0   0   0   0   7   0   9   0
0   9   0   0   5   0   5   0   0   12  12  0   0   0   0   10  0   0   0   9
0   0   0   0   5   0   0   5   0   12  12  0   0   5   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   12  12  0   0   5   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   5   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   5   0   0   0   0   0   0
40  30  3   6   6   0   0   0   0   0   0   0   0   5   5   0   0   0   10  0
0   0   20  0   0   6   6   0   0   0   0   0   0   0   5   6   5   10  10  0
40  30  3   7   6   0   0   0   0   0   0   0   0   0   0   6   0   0   10  0
0   0   0   0   0   0   0   17  0   0   0   0   17  0   0   6   5   7   7   0
0   0   0   0   0   0   0   0   7   0   0   7   0   0   0   0   0   0   0   0
0   20  0   0   7   0   0   0   0   4   4   0   0   0   0   0   10  0   0   0
0   20  0   0   7   0   0   0   0   4   4   0   0   0   0   0   10  0   0   0
0   20  0   0   7   0   0   0   0   4   4   0   0   0   0   0   10  0   0   0
0   30  0   7   0   0   0   0   0   5   5   0   0   0   0   0   0   10  0   50
0   40  7   0   0   0   0   0   0   5   5   0   0   0   0   0   0   0   50  0
43  30  25  10  50  0   0   0   6   6   6   6   0   0   0   0   0   50  0   0
输出范例:
323

116

主要采用回溯算法,但是不知道为什么通过率只有20%,可能阿里的题确实太难了。不过这是第一次做出阿里的笔试题,例题跑通了感觉很开心。代码如下,Python写的:

n = int(raw_input())
m = int(raw_input())
a = []
bingli = []
zhuangtai = [[0 for x in range(m)] for y in range(n)]

for i in range(n):
    a.append(list(map(int, raw_input().strip().split())))



def fangzhen(a, i, j):
    global count
    count += a[i][j]
    if i+1 <= 19 and j <= 19 and a[i+1][j] != 0 and zhuangtai[i+1][j] == 0:
        zhuangtai[i + 1][j] = 1
        fangzhen(a, i+1, j)

    if i <= 19 and j+1 <= 19 and a[i][j+1] != 0 and zhuangtai[i][j+1] == 0:
        zhuangtai[i][j + 1] = 1
        fangzhen(a, i, j+1)

    if i+1 <= 19 and j+1 <= 19 and a[i+1][j+1] != 0 and zhuangtai[i+1][j+1] == 0:
        zhuangtai[i + 1][j + 1] = 1
        fangzhen(a, i+1, j+1)

    if i-1 >= 0 and j >= 0 and a[i-1][j] != 0 and zhuangtai[i-1][j] == 0:
        zhuangtai[i - 1][j] = 1
        fangzhen(a, i-1, j)

    if i >= 0 and j-1 >= 0 and a[i][j-1] != 0 and zhuangtai[i][j-1] == 0:
        zhuangtai[i][j - 1] = 1
        fangzhen(a, i, j-1)

    if i-1 >= 0 and j-1 >= 0 and a[i-1][j-1] != 0 and zhuangtai[i-1][j-1] == 0:
        zhuangtai[i - 1][j - 1] = 1
        fangzhen(a, i-1, j-1)

    if i+1 <= 19 and j-1 >= 0 and a[i+1][j-1] != 0 and zhuangtai[i+1][j-1] == 0:
        zhuangtai[i + 1][j - 1] = 1
        fangzhen(a, i+1, j-1)

    if i-1 >= 0 and j+1 <= 19 and a[i-1][j+1] != 0 and zhuangtai[i-1][j+1] == 0:
        zhuangtai[i - 1][j + 1] = 1
        fangzhen(a, i-1, j+1)
    return count


for i in range(n):
    for j in range(m):
        if a[i][j] != 0 and zhuangtai[i][j] == 0:
            zhuangtai[i][j] = 1
            global count
            count = 0
            fangzhen(a, i, j)
            bingli.append(count)

bingli_max = max(bingli)
bingli_min = min(bingli)
print(bingli_max)
print(bingli_min)

在下刚刚入门算法,萌新一枚,大家一起共勉。希望大佬不吝赐教。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142413.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • navicat premium 15 激活码 mac(JetBrains全家桶)「建议收藏」

    (navicat premium 15 激活码 mac)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • Linux移植之移植步骤

    Linux移植之移植步骤在这里总结一下我在移植Linux2.6.22.6内核过程时的步骤。移植成功后最终能挂接做好的根文件系统,并且启动第一个init程序。移植的步骤如下:1、将网上下载的内核源码文件linux-2.6.2

  • turtle递归作图绘制谢尔宾斯基地毯【详解】

    turtle递归作图绘制谢尔宾斯基地毯【详解】python数据结构与算法turtle递归作图绘制谢尔宾斯基地毯

  • JDK 安装与环境变量配置(Win10详细版)

    JDK 安装与环境变量配置(Win10详细版)前言为什么写这篇文章呢,因为我不想再去百度搜别人的文章了,所以自己写一篇以作记录。准备工作JDK8下载地址一个JDK安装程序,这是是1.8版本,因为新的JDK版本都没有什么很大的亮点,如下图所示,安装鼠标双击运行,选择“是”,然后如下图:点击下一步:我在这里并不修改JDK的安装路径,所以无需改动,点击下一步:安装过程中会弹出jre的安装提示框,如下所示:这里无需…

  • Delphi XE3 下安装ActiveX控件「建议收藏」

    Delphi XE3 下安装ActiveX控件「建议收藏」http://blog.csdn.net/lee576/article/details/1770744此英文文章来自codegear官方网站,但是是讲在BDS2006 下如何安装,我在delphi2007下用此方法,一样通过,原文如下 Description:HowtoimportanActiveXcontrolinBDS2006?Answer/S

  • scrapy爬虫完整的代码实例[通俗易懂]

    scrapy爬虫完整的代码实例[通俗易懂]新建工程scrapystartprojecttutorial进入tutorial目录,在spider下面新建quotes_spider.pyimportscrapyfrom..itemsimportQuotesItem#coding:utf-8classQuotesSpider(scrapy.Spider):name=”quot…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号