“绿盟杯”模拟赛第一阶段(Python版题解)

(一)简单排序

挑战任务

本次挑战,你需要根据输入的排序类型,实现对输入数组的排序。其中,排序类型包括asc(升序)或desc(降序)。

编程要求

补充完善右侧代码区中的sortArray(self,arr,sort)函数,实现对给定数组的排序。其中,函数各参数含义如下:

  • arr:输入数组
  • sort:排序类型

测试说明

样例1

输入:
23,12,2,32,11,125
asc

输出:
2
11
12
23
32
125

样例2

输入:
23,12,2,32,11,125
desc

输出:
125
32
23
12
11
2

注意:

  • 针对本关的具体评测代码由平台后台提供,你只需补充完善sortArray函数即可,其他代码无须填写;
  • 本关共包含4个测试用例,需所有测试用例评测通过才能得分;
  • 平台使用的Python版本为:Python3.6.2

开始挑战吧,祝你成功!

题解

class Task():
    def sortArray(self,arr,sort):
        if sort == "asc":
            arr.sort()
            for i in range(len(arr)):
                print(arr[i])
        if sort == "desc":
            array = sorted(arr)
            array.reverse()
            for i in range(len(array)):
                print(array[i])


(二)奇偶数判断与求和

挑战任务

系统会输入一个0-100的整数n,要求当n为偶数时,输出3/2+3/4+...+3/n的和,当输入n为奇数时,则输出4/1+4/3+...+4/n的和。

编程要求

补充右侧代码区域代码,要求根据输入的整数n来输出相应结果。

测试说明

样例
测试输入:3

预期输出:5.333333333333333


开始通关吧,祝你成功!

题解

# coding=utf-8

num = int(input())
########## BEGIN ##########

num_sum = 0
if num%2 == 0:
    for i in range(1,num+1):
        if i%2 == 0:
            num_sum += 3 / i
    print(num_sum)
if num%2 != 0:
    for i in range(1,num+1):
        if i%2 != 0:
            num_sum += 4/i
    print(num_sum)


########## END ##########

(三)矩阵求和

挑战任务

编写代码,求一个n*n矩阵对角线元素之和。

编程要求

补充完善右侧代码区中的matricSum(self,arr)函数,实现矩阵对角线求和的功能。其中,函数参数含义如下:

  • arr:输入的二维列表

测试说明

样例
输入的矩阵是一个二维列表如:

  1. {
  2. { 1, 2, 3 },
  3. { 4, 5, 6 },
  4. { 7, 8, 9 }
  5. };

第一个数为维度3,后面依次输入19

计算后输出:15


开始通关吧,祝你成功!

题解

class Task:
########### BEGIN ##########
    def matricSum(self,arr):
        matric_sum = 0
        for i in range(len(arr)):
            for j in range(len(arr[0])):
                if i ==j:
                    matric_sum += arr[i][j]
        print(matric_sum)

(四)二维列表求和

挑战任务

编写代码 对给定的二维列表进行降序排序后输出该列表,将一维列表中的数据进行降序排序,然后以一维列表的和作为整体进行降序排序。

编程要求

补充完善右侧代码区中的sortArray(self,arr)函数,实现对给定列表的排序。其中,函数各参数含义如下:

  • arr:输入的二维列表

测试说明

样例
给定一个二维列表

  1. {
  2. { 1,3,12,2,11},
  3. {32,23,11,20,2},
  4. {2,12,23,123,22},
  5. {321,11,2,100,50},
  6. {502,220,110,22,1}
  7. }

排序后输出:

[502, 220, 110, 22, 1]
[321, 100, 50, 11, 2]
[123, 23, 22, 12, 2]
[32, 23, 20, 11, 2]
[12, 11, 3, 2, 1]


开始通关吧,祝你成功!

题解:

#  对给定的二维列表进行降序排序后输出该列表,将一维列表中的数据进行降序排序,然后以一维列表的和作为整体进行降序排序。

class Task:
    # 功能是输出排序好的二维列表
    # def sortArray(self,arr):
    #     new_array = list()
    #     for i in range(len(arr)):
    #         # array1D = sorted(arr[i])
    #         array1D = sorted(arr[i])
    #         array1D.reverse()
    #         new_array.append(array1D)
    #
    #     new_array = sorted(new_array, key=lambda new_array: sum(new_array), reverse=True)
    #     print(new_array)

    def sortArray(self,arr):
        new_array = list()
        for i in range(len(arr)):
            # array1D = sorted(arr[i])
            array1D = sorted(arr[i])
            array1D.reverse()
            new_array.append(array1D)

        new_array = sorted(new_array, key=lambda new_array: sum(new_array), reverse=True)
        #要求只输出排序好的一维列表
        for i in range(len(new_array)):
            print(new_array[i])


#测试
a = Task()
b = a.sortArray([[1,3,12,2,11],[32,23,11,20,2],[2,12,23,123,22],[321,11,2,100,50],[502,220,110,22,1]])

 

(五)二叉树最大深度计算

挑战任务

对于给定的二叉树,返回该二叉树的最大深度。

编程要求

补充右侧代码区域的getDepth(self,treeNode)函数,要求能返回二叉树的最大深度,其中函数参数定义如下:

  • treeNode:二叉树

注:选手在将二叉树的最大深度作为返回值返回即可。

测试说明

样例
给出如下一棵二叉树:

  1. 1
  2. / \
  3. 8 1
  4. / \ / \
  5. 0 3 -4 -5

返回值为3 。

 

本关涉及到的二叉树TreeNode的代码结构:

  1. class TreeNode:
  2. def __init__(self,elem=-1,left=None,right=None):
  3. self.val=elem
  4. self.left = left
  5. self.right = right

开始通关吧,祝你成功!

题解

# coding=utf-8

class Task:
########## BEGIN ##########
#### 返回二叉树的深度 #####
    def getDepth(self, treeNode):
        if treeNode == None:
            return 0;
        lDepth = Task.getDepth(self, treeNode.left);
        rDepth = Task.getDepth(self, treeNode.right);
        return max(lDepth, rDepth) + 1

########## END ##########

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值