获得徽章 0
#刷题交流# n 个整数两两相加可以得到 n(n - 1) / 2 个和。我们的目标是:根据这些和找出原来的 n 个整数。
def complete_all(smallest, sum_list):
parameters = [smallest]
while sum_list:
next_val = sum_list[0] - parameters[0]
for param in parameters:
try:
sum_list.remove(next_val + param)
except ValueError:
return []
parameters.append(next_val)
return parameters
def find_pairsumonious_numbers_by_second_method(sum_list, n):
sum_list.sort()
for i in range(2, n + 2):
if i >= len(sum_list):
return []
tmp = sum_list[0] + sum_list[1] - sum_list[i]
if tmp % 2 == 1:
continue
answer = complete_all(tmp // 2, sum_list[:])
if answer:
return answer
return []
def complete_all(smallest, sum_list):
parameters = [smallest]
while sum_list:
next_val = sum_list[0] - parameters[0]
for param in parameters:
try:
sum_list.remove(next_val + param)
except ValueError:
return []
parameters.append(next_val)
return parameters
def find_pairsumonious_numbers_by_second_method(sum_list, n):
sum_list.sort()
for i in range(2, n + 2):
if i >= len(sum_list):
return []
tmp = sum_list[0] + sum_list[1] - sum_list[i]
if tmp % 2 == 1:
continue
answer = complete_all(tmp // 2, sum_list[:])
if answer:
return answer
return []
展开
评论
点赞
#刷题交流# 小R拿到了一个长度为n的数组,其中每个元素都是一个正整数。小R发现每次可以删除某个数组中某个数的一位数字,这样可以逐步将所有数字变为0。他想知道,要将数组中所有数字都变为0,最少需要多少步?
def solution(n: int, a: list) -> int:
assert n == len(a)
s = "".join(str(x) for x in a)
return len(s) - s.count('0')
if __name__ == '__main__':
print(solution(n = 5,a = [10, 13, 22, 100, 30]) == 7)
print(solution(n = 3,a = [5, 50, 505]) == 4)
print(solution(n = 4,a = [1000, 1, 10, 100]) == 4)
def solution(n: int, a: list) -> int:
assert n == len(a)
s = "".join(str(x) for x in a)
return len(s) - s.count('0')
if __name__ == '__main__':
print(solution(n = 5,a = [10, 13, 22, 100, 30]) == 7)
print(solution(n = 3,a = [5, 50, 505]) == 4)
print(solution(n = 4,a = [1000, 1, 10, 100]) == 4)
展开
评论
点赞
#刷题交流# 给定一个矩形和一个固定点 P,需要计算一个以点 P 为圆心的最小圆,使得该圆完全覆盖给定的矩形,并计算该圆的面积。圆的半径是点 P 到矩形四个顶点中最远距离,而面积可以通过公式 A=π⋅r*r 来计算。需要注意的是,π 取值为 3.1415926536。
import math
def solution(x1: int, y1: int, x2: int, y2: int, xP: int, yP: int) -> str:
distance1 = math.sqrt((xP - x1)**2 + (yP - y1)**2)
distance2 = math.sqrt((xP - x1)**2 + (yP - y2)**2)
distance3 = math.sqrt((xP - x2)**2 + (yP - y1)**2)
distance4 = math.sqrt((xP - x2)**2 + (yP - y2)**2)
# 找到点P到矩形四个顶点的最大距离
max_distance = max(distance1, distance2, distance3, distance4)
# 计算圆的面积
# 使用公式:A = π * r^2
area = math.pi * max_distance**2
# 将面积保留两位小数并转换为字符串
return f"{area:.2f}"
if __name__ == '__main__':
print(solution(x1 = 0, y1 = 0, x2 = 1, y2 = 1, xP = 0, yP = 0) == '6.28')
print(solution(x1 = -2, y1 = -2, x2 = 2, y2 = 2, xP = 0, yP = 0) == '25.13')
print(solution(x1 = -3, y1 = -1, x2 = 1, y2 = 2, xP = 0, yP = 0) == '40.84')
import math
def solution(x1: int, y1: int, x2: int, y2: int, xP: int, yP: int) -> str:
distance1 = math.sqrt((xP - x1)**2 + (yP - y1)**2)
distance2 = math.sqrt((xP - x1)**2 + (yP - y2)**2)
distance3 = math.sqrt((xP - x2)**2 + (yP - y1)**2)
distance4 = math.sqrt((xP - x2)**2 + (yP - y2)**2)
# 找到点P到矩形四个顶点的最大距离
max_distance = max(distance1, distance2, distance3, distance4)
# 计算圆的面积
# 使用公式:A = π * r^2
area = math.pi * max_distance**2
# 将面积保留两位小数并转换为字符串
return f"{area:.2f}"
if __name__ == '__main__':
print(solution(x1 = 0, y1 = 0, x2 = 1, y2 = 1, xP = 0, yP = 0) == '6.28')
print(solution(x1 = -2, y1 = -2, x2 = 2, y2 = 2, xP = 0, yP = 0) == '25.13')
print(solution(x1 = -3, y1 = -1, x2 = 1, y2 = 2, xP = 0, yP = 0) == '40.84')
展开
评论
点赞
#刷题交流# 小S有一批糖果 candies,他打算将这些糖果分给排成一列的 n 个小朋友。糖果的分发规则如下:
第一个小朋友获得 1 颗糖果,第二个小朋友获得 2 颗糖果,依此类推,直到第 n 个小朋友获得 n 颗糖果。
然后回到队伍的起点,继续分糖果。第一个小朋友这次获得 n + 1 颗糖果,第二个小朋友获得 n + 2 颗,依此类推,直到第 n 个小朋友获得 2 * n 颗糖果。
重复上述过程,每次分发的糖果数增加 1,直到糖果分完。如果剩下的糖果数量不足以满足当前轮次分发的要求,则将所有剩余的糖果分给当前的小朋友。
你需要返回一个长度为 n 的数组,表示每个小朋友最终获得的糖果数。
def solution(candies: int, n: int) -> list:
ans, i = [0] * n, 0
while candies:
ans[i % n] += min(i + 1, candies)
candies -= min(i + 1, candies)
i += 1
return ans
if __name__ == '__main__':
print(solution(candies = 7 ,n = 4) == [1, 2, 3, 1])
print(solution(candies = 10 ,n = 3) == [5, 2, 3])
print(solution(candies = 20 ,n = 5) == [6, 2, 3, 4, 5])
第一个小朋友获得 1 颗糖果,第二个小朋友获得 2 颗糖果,依此类推,直到第 n 个小朋友获得 n 颗糖果。
然后回到队伍的起点,继续分糖果。第一个小朋友这次获得 n + 1 颗糖果,第二个小朋友获得 n + 2 颗,依此类推,直到第 n 个小朋友获得 2 * n 颗糖果。
重复上述过程,每次分发的糖果数增加 1,直到糖果分完。如果剩下的糖果数量不足以满足当前轮次分发的要求,则将所有剩余的糖果分给当前的小朋友。
你需要返回一个长度为 n 的数组,表示每个小朋友最终获得的糖果数。
def solution(candies: int, n: int) -> list:
ans, i = [0] * n, 0
while candies:
ans[i % n] += min(i + 1, candies)
candies -= min(i + 1, candies)
i += 1
return ans
if __name__ == '__main__':
print(solution(candies = 7 ,n = 4) == [1, 2, 3, 1])
print(solution(candies = 10 ,n = 3) == [5, 2, 3])
print(solution(candies = 20 ,n = 5) == [6, 2, 3, 4, 5])
展开
评论
点赞
#刷题交流# 打卡刷题,分享今天的一道题目:小R有一个字符串 word,该字符串由数字和小写英文字母组成。小R想用空格替换每一个不是数字的字符。然后,他希望统计在替换后剩下的整数中,不同整数的数目。
例如,给定字符串 "a123bc34d8ef34",替换后形成的字符串是 " 123 34 8 34",剩下的整数是 "123"、"34"、"8" 和 "34"。不同的整数有三个,即 "123"、"34" 和 "8"。
注意,只有当两个整数的不含前导零的十进制表示不同,才认为它们是不同的整数。
def solution(word: str) -> int:
# 1. 将所有非数字字符替换为空格
word = ''.join(' ' if not char.isdigit() else char for char in word)
# 2. 提取整数并去除前导零
integers = set()
for num in word.split():
# 去除前导零
num = num.lstrip('0')
# 如果去除前导零后为空字符串,则视为0
if num == '':
num = '0'
integers.add(num)
# 3. 返回不同整数的数量
return len(integers)
if __name__ == '__main__':
print(solution("a123bc34d8ef34") == 3)
print(solution("t1234c23456") == 2)
print(solution("a1b01c001d4") == 2)
例如,给定字符串 "a123bc34d8ef34",替换后形成的字符串是 " 123 34 8 34",剩下的整数是 "123"、"34"、"8" 和 "34"。不同的整数有三个,即 "123"、"34" 和 "8"。
注意,只有当两个整数的不含前导零的十进制表示不同,才认为它们是不同的整数。
def solution(word: str) -> int:
# 1. 将所有非数字字符替换为空格
word = ''.join(' ' if not char.isdigit() else char for char in word)
# 2. 提取整数并去除前导零
integers = set()
for num in word.split():
# 去除前导零
num = num.lstrip('0')
# 如果去除前导零后为空字符串,则视为0
if num == '':
num = '0'
integers.add(num)
# 3. 返回不同整数的数量
return len(integers)
if __name__ == '__main__':
print(solution("a123bc34d8ef34") == 3)
print(solution("t1234c23456") == 2)
print(solution("a1b01c001d4") == 2)
展开
评论
点赞
#刷题交流# 周二刷题:小U得到一个只包含小写字母的字符串 S。她可以执行如下操作:每次选择字符串中两个相同的字符删除,然后在字符串末尾添加一个任意的小写字母。小U想知道,最少需要多少次操作才能使得字符串中的所有字母都不相同?
def solution(S: str) -> int:
from collections import Counter
c = list(Counter(S).values())
ans = 0
M = 26
for i in range(len(c)):
if len(c) == M:
break
while c[i] > 2 and len(c) < M:
c.append(1)
c[i] -= 2
ans += 1
for x in c:
ans += x - 1
return ans
if __name__ == '__main__':
print(solution(S = "abab") == 2)
print(solution(S = "aaaa") == 2)
print(solution(S = "abcabc") == 3)
def solution(S: str) -> int:
from collections import Counter
c = list(Counter(S).values())
ans = 0
M = 26
for i in range(len(c)):
if len(c) == M:
break
while c[i] > 2 and len(c) < M:
c.append(1)
c[i] -= 2
ans += 1
for x in c:
ans += x - 1
return ans
if __name__ == '__main__':
print(solution(S = "abab") == 2)
print(solution(S = "aaaa") == 2)
print(solution(S = "abcabc") == 3)
展开
评论
点赞
#刷题交流# 小D拿到了一个仅由 "abc" 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换:
将 'a' 变成 'bc'
将 'b' 变成 'ca'
将 'c' 变成 'ab'
小D将重复该操作 k 次。你的任务是输出经过 k 次变换后,得到的最终字符串。
例如:对于初始字符串 "abc",执行 2 次操作后,字符串将变为 "caababbcbcca"。
def solution(s, k):
# 初始字符串
current_string = s
# 进行 k 次操作
for _ in range(k):
# 每次操作生成的新字符串
new_string = ""
# 遍历当前字符串中的每个字符
for char in current_string:
# 根据变换规则生成新的字符串
if char == 'a':
new_string += 'bc'
elif char == 'b':
new_string += 'ca'
elif char == 'c':
new_string += 'ab'
# 更新当前字符串为新生成的字符串
current_string = new_string
# 返回最终的字符串
return current_string
if __name__ == '__main__':
print(solution("abc", 2) == 'caababbcbcca')
print(solution("abca", 3) == 'abbcbccabccacaabcaababbcabbcbcca')
print(solution("cba", 1) == 'abcabc')
将 'a' 变成 'bc'
将 'b' 变成 'ca'
将 'c' 变成 'ab'
小D将重复该操作 k 次。你的任务是输出经过 k 次变换后,得到的最终字符串。
例如:对于初始字符串 "abc",执行 2 次操作后,字符串将变为 "caababbcbcca"。
def solution(s, k):
# 初始字符串
current_string = s
# 进行 k 次操作
for _ in range(k):
# 每次操作生成的新字符串
new_string = ""
# 遍历当前字符串中的每个字符
for char in current_string:
# 根据变换规则生成新的字符串
if char == 'a':
new_string += 'bc'
elif char == 'b':
new_string += 'ca'
elif char == 'c':
new_string += 'ab'
# 更新当前字符串为新生成的字符串
current_string = new_string
# 返回最终的字符串
return current_string
if __name__ == '__main__':
print(solution("abc", 2) == 'caababbcbcca')
print(solution("abca", 3) == 'abbcbccabccacaabcaababbcabbcbcca')
print(solution("cba", 1) == 'abcabc')
展开
评论
点赞
#刷题交流# 小C定义了一个“完美偶数”。一个正整数 x。x 被认为是完美偶数需要满足以下两个条件:
xx 是偶数;xx 的值在区间 [l,r][l,r] 之间。现在,小C有一个长度为 nn 的数组 a
a,她想知道在这个数组中有多少个完美偶数。
def solution(n: int, l: int, r: int, a: list) -> int:
# 初始化计数器
count = 0
# 遍历数组,检查每个元素是否符合条件
for x in a:
if l <= x <= r and x % 2 == 0:
count += 1
# 返回符合条件的完美偶数的数量
return count
if __name__ == '__main__':
# 测试用例
print(solution(5, 3, 8, [1, 2, 6, 8, 7]) == 2) # 满足条件的是6和8
print(solution(4, 10, 20, [12, 15, 18, 9]) == 2) # 满足条件的是12和18
print(solution(3, 1, 10, [2, 4, 6]) == 3) # 满足条件的是2、4和6
xx 是偶数;xx 的值在区间 [l,r][l,r] 之间。现在,小C有一个长度为 nn 的数组 a
a,她想知道在这个数组中有多少个完美偶数。
def solution(n: int, l: int, r: int, a: list) -> int:
# 初始化计数器
count = 0
# 遍历数组,检查每个元素是否符合条件
for x in a:
if l <= x <= r and x % 2 == 0:
count += 1
# 返回符合条件的完美偶数的数量
return count
if __name__ == '__main__':
# 测试用例
print(solution(5, 3, 8, [1, 2, 6, 8, 7]) == 2) # 满足条件的是6和8
print(solution(4, 10, 20, [12, 15, 18, 9]) == 2) # 满足条件的是12和18
print(solution(3, 1, 10, [2, 4, 6]) == 3) # 满足条件的是2、4和6
展开
评论
点赞