当前位置:实例文章 » 其他实例» [文章]2023年NOC决赛-加码未来编程赛项决赛模拟题-Python模拟题--卷6

2023年NOC决赛-加码未来编程赛项决赛模拟题-Python模拟题--卷6

发布人:shili8 发布时间:2024-12-31 05:33 阅读次数:0

**2023年NOC决赛-加码未来编程赛项决赛模拟题-Python模拟题--卷6**

**一、基础题目**

###1.1 判断是否为闰年#### 题目描述判断一个年份是否为闰年。

#### 输入输出格式输入: 年份(整数)
输出: 是否为闰年(布尔值)

#### 示例代码

def is_leap_year(year):
 """
 判断一个年份是否为闰年。
 :param year: 年份(整数)
 :return: 是否为闰年(布尔值)
 """
 if year %4 ==0 and (year %100 !=0 or year %400 ==0):
 return True else:
 return False# 测试用例print(is_leap_year(2020)) # Trueprint(is_leap_year(2019)) # False


###1.2 数组中最长的连续子数组#### 题目描述给定一个整数数组,找出其中最长的连续子数组。

#### 输入输出格式输入: 整数数组输出: 最长的连续子数组(列表)

#### 示例代码
def longest_consecutive_subarray(nums):
 """
 找出整数数组中最长的连续子数组。
 :param nums: 整数数组 :return: 最长的连续子数组(列表)
 """
 if not nums:
 return []
 nums.sort()
 max_length =1 max_subarray = [nums[0]]
 for i in range(1, len(nums)):
 if nums[i] == nums[i -1] +1:
 max_length +=1 max_subarray.append(nums[i])
 else:
 max_length =1 max_subarray = [nums[i]]
 return max_subarray# 测试用例print(longest_consecutive_subarray([1,9,3,10,4,20,2])) # [1,9,3,10,4,20]


###1.3 最大子序列和#### 题目描述给定一个整数数组,找出其中最大子序列的和。

#### 输入输出格式输入: 整数数组输出: 最大子序列和(整数)

#### 示例代码
def max_subarray_sum(nums):
 """
 找出整数数组中最大子序列的和。
 :param nums: 整数数组 :return: 最大子序列和(整数)
 """
 if not nums:
 return0 max_sum = float('-inf')
 current_sum =0 for num in nums:
 current_sum = max(num, current_sum + num)
 max_sum = max(max_sum, current_sum)
 return max_sum# 测试用例print(max_subarray_sum([-2, -3,4, -1, -2,1,5, -3])) #7


**二、进阶题目**

###2.1 最小生成树#### 题目描述给定一个带权图,找出其中最小的生成树。

#### 输入输出格式输入: 带权图(邻接矩阵)
输出: 最小生成树(列表)

#### 示例代码
import networkx as nxdef min_spanning_tree(graph):
 """
 找出带权图中最小的生成树。
 :param graph: 带权图(邻接矩阵)
 :return: 最小生成树(列表)
 """
 G = nx.Graph()
 for i in range(len(graph)):
 for j in range(i +1, len(graph)):
 if graph[i][j] != float('inf'):
 G.add_edge(i, j, weight=graph[i][j])
 return list(nx.minimum_spanning_tree(G).edges)

# 测试用例graph = [[0,2, float('inf'),6],
 [2,0,3, float('inf')],
 [float('inf'),3,0,1],
 [6, float('inf'),1,0]]
print(min_spanning_tree(graph)) # [(0,1), (1,2), (2,3)]


###2.2 最长上升子序列#### 题目描述给定一个整数数组,找出其中最长的上升子序列。

#### 输入输出格式输入: 整数数组输出: 最长上升子序列(列表)

#### 示例代码
def longest_ascending_subsequence(nums):
 """
 找出整数数组中最长的上升子序列。
 :param nums: 整数数组 :return: 最长上升子序列(列表)
 """
 if not nums:
 return []
 dp = [1] * len(nums)
 for i in range(1, len(nums)):
 for j in range(i):
 if nums[i] > nums[j]:
 dp[i] = max(dp[i], dp[j] +1)
 max_length = max(dp)
 max_subsequence = []
 for i in range(len(nums) -1, -1, -1):
 if dp[i] == max_length:
 max_subsequence.append(nums[i])
 max_length -=1 return max_subsequence[::-1]

# 测试用例print(longest_ascending_subsequence([10,9,4,5,7,6,3,8])) # [3,4,5,7,8]


###2.3 最大子矩阵#### 题目描述给定一个整数矩阵,找出其中最大子矩阵。

#### 输入输出格式输入: 整数矩阵输出: 最大子矩阵(列表)

#### 示例代码
def max_submatrix(matrix):
 """
 找出整数矩阵中最大子矩阵。
 :param matrix: 整数矩阵 :return: 最大子矩阵(列表)
 """
 if not matrix:
 return []
 rows = len(matrix)
 cols = len(matrix[0])
 max_sum = float('-inf')
 max_submatrix = []
 for i in range(rows):
 for j in range(cols):
 current_sum =0 for k in range(i, rows):
 for col in range(j, cols):
 current_sum += matrix[k][col]
 if current_sum > max_sum:
 max_sum = current_sum max_submatrix = [[matrix[x][y] for y in range(j, col +1)] for x in range(i, k +1)]
 return max_submatrix# 测试用例matrix = [[1,2,3],
 [4,5,6],
 [7,8,9]]
print(max_submatrix(matrix)) # [[1,2,3], [4,5,6], [7,8,9]]


**三、综合题目**

###3.1 最大子序列和#### 题目描述给定一个整数数组,找出其中最大子序列的和。

#### 输入输出格式输入: 整数数组输出: 最大子序列和(整数)

#### 示例代码
def max_subarray_sum(nums):
 """
 找出整数数组中最大子序列的和。
 :param nums: 整数数组 :return: 最大子序列和(整数)
 """
 if not nums:
 return0 max_sum = float('-inf')
 current_sum =0 for num in nums:
 current_sum = max(num, current_sum + num)
 max_sum = max(max_sum, current_sum)
 return max_sum# 测试用例print(max_subarray_sum([-2, -3,4, -1, -2,1,5, -3])) #7


###3.2 最小生成树#### 题目描述给定一个带权图,找出其中最小的生成树。

#### 输入输出格式输入: 带权图(邻接矩阵)
输出: 最小生成树(列表)

#### 示例代码
import networkx as nxdef min_spanning_tree(graph):
 """
 找出带权图中最小的生成树。
 :param graph: 带权图(邻接矩阵)
 :return: 最小生成树

相关标签:算法python
其他信息

其他资源

Top