Kadad

用户名Kadad
班级
学号202420113312

提交总数 0
通过 0
通过率 0%
错误解答 0
时间超限 0
编译错误 0

##1.给定一个不含重复元素的整数数组 nums以此数组直接递归构建的最大二叉树 nums = input().split(' ') res = [] def fun(lst:list): global res if lst == []: res.append('null') else: m = max(lst) i = lst.index(m) res.append(str(m)) if len(lst)>1: fun(lst[0:i]) fun(lst[i+1:]) nums = [int(n) for n in nums] fun(nums) print(' '.join(res)) def create(nums): if not nums: return i = nums.index(max(nums)) print(nums.pop(i),end=' ') if i==0 and nums: print('null',end=' ') create(nums) elif i==len(nums) and nums: create(nums) print("null",end=' ') else: create(nums[:i]) create(nums[i:]) b=[] for i in input().split(): b.append(int(i)) create(b) ##给定一个大小为n的整型数组a,找到其中的多数元素,多数元素是指在数组中出现次数大于⌊n/2⌋的元素。 n = int(input()) a = list(map(int, input().split())) candidate = a[0] count = 1 for num in a[1:]: if num == candidate: count += 1 else: count -= 1 if count == 0: candidate = num count = 1 print(candidate) ##给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 n = int(input()) nums = list(map(int, input().split())) if not nums: print(0) else: current_sum = max_sum = nums[0] for num in nums[1:]: current_sum = max(num, current_sum + num) max_sum = max(max_sum, current_sum) print(max_sum) ##给定面值分别为2,5,7的硬币,每种硬币有无限个,给定一个N,求组成N最少需要的硬币的数量,若无法组成则返回-1. N = int(input()) coins = [2, 5, 7] dp = [float('inf')] * (N + 1) dp[0] = 0 for i in range(1, N + 1): for coin in coins: if i >= coin: dp[i] = min(dp[i], dp[i - coin] + 1) print(dp[N] if dp[N] != float('inf') else -1) ##m行n列的网格,从左上角(1,1)出发,每一步只能向下或者向右,问共有多少种方法可以走到右下角(m,n) import math def calculate_paths(m, n): return math.comb(m+n-2, m-1) m, n = map(int, input().split()) print(calculate_paths(m, n)) ##假设你正在爬楼梯。需要爬n阶你才能到达楼顶(n是正整数)。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? n = int(input()) a, b = 1, 2 for _ in range(n - 1): a, b = b, a + b print(a) ##要求在不超过背包承重的前提下,选出的物品总价值最大。输出能装入背包的物品的最大总价值。 n, c = map(int, input().split()) w = list(map(int, input().split())) v = list(map(int, input().split())) dp = [0] * (c + 1) for i in range(n): for j in range(c, w[i] - 1, -1): dp[j] = max(dp[j], dp[j - w[i]] + v[i]) print(dp[c]) ##求一个字符串中的最长的回文子串 s = input().strip() n = len(s) if n < 2: print(s) exit() start, max_len = 0, 1 def expand_around_center(left, right): while left >= 0 and right < n and s[left] == s[right]: left -= 1 right += 1 return right - left - 1 for i in range(n): len1 = expand_around_center(i, i) len2 = expand_around_center(i, i + 1) current_max = max(len1, len2) if current_max > max_len: max_len = current_max start = i - (max_len - 1) // 2 print(s[start:start + max_len]) ##给你一个整数数组 nums 和一个整数 target ,向数组中的每个整数前添加'+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 nums = list(map(int, input().split())) target = int(input()) total = sum(nums) if (total + target) % 2 != 0 or total < abs(target): print(0) else: p = (total + target) // 2 dp = [0] * (p + 1) dp[0] = 1 for num in nums: for i in range(p, num - 1, -1): dp[i] += dp[i - num] print(dp[p]) ##给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案按字母顺序返回。 import itertools def letter_combinations(digits): if not digits: return [] digit_map = { '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz' } letters = [digit_map[d] for d in digits] products = itertools.product(*letters) result = [''.join(p) for p in products] result.sort() return result digits = input().strip() combinations = letter_combinations(digits) print(str(combinations).replace("'", "")) ##假设有从 1 到 n 的 n 个整数,给你一个整数 n ,返回可以构造的 优美排列 的 数量 。 n = int(input()) count = 0 def backtrack(position, used): global count if position > n: count += 1 return for num in range(1, n + 1): if not used[num] and (num % position == 0 or position % num == 0): used[num] = True backtrack(position + 1, used) used[num] = False used = [False] * (n + 1) backtrack(1, used) print(count) ##给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 n, k = map(int, input().split()) def backtrack(start, path): if len(path) == k: print(' '.join(map(str, path))) return for i in range(start, n + 1): path.append(i) backtrack(i + 1, path) path.pop() backtrack(1, []) ##给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 def integerBreak(n): if n == 2: return 1 if n == 3: return 2 product = 1 while n > 4: product *= 3 n -= 3 product *= n return product n = int(input()) print(integerBreak(n)) ##给你一个装有n枚硬币的袋子。其中有一枚硬币是伪造的,并且伪造的硬币比真的硬币要轻一些。用一个整型数组a代表硬币的重量。 你的任务是找出这枚伪造的硬币。 n = int(input()) a = list(map(int, input().split())) def find_fake(start, end): if start == end: return start + 1 # 返回位置(从1开始) size = end - start + 1 group_size = (size + 2) // 3 # 确保分组合理 # 分成三组:g1, g2, g3 g1_end = start + group_size - 1 g2_end = g1_end + group_size # 比较前两组的重量 sum1 = sum(a[start:g1_end + 1]) sum2 = sum(a[g1_end + 1:g2_end + 1]) if sum1 < sum2: return find_fake(start, g1_end) elif sum1 > sum2: return find_fake(g1_end + 1, g2_end) else: return find_fake(g2_end + 1, end) print(find_fake(0, n - 1)) ##给定一个非空的正整数数组 nums(nums.length < 5) ,请判断能否将这些数字分成元素和相等的两部分 nums = list(map(int, input().split())) total = sum(nums) if total % 2 != 0: print("false") else: target = total // 2 dp = [False] * (target + 1) dp[0] = True for num in nums: for i in range(target, num - 1, -1): dp[i] = dp[i] or dp[i - num] print("true" if dp[target] else "false") ##给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。 A = list(map(int, input().split())) A.sort() n = len(A) max_perimeter = 0 for i in range(n - 1, 1, -1): if A[i - 2] + A[i - 1] > A[i]: max_perimeter = A[i - 2] + A[i - 1] + A[i] break print(max_perimeter)

已解答 0 Problems
没有找到数据。

未解答 0 Problems
没有找到数据。