Math

a + b >= c, 不构成三角形

a ** 2 + b ** 2 < c **2 ,钝角三角形 


中位数的定义

中位数是指将一个数组排序后,位于数组中间位置的值。如果数组长度为奇数,则中位数是中间的那个数;如果数组长度为偶数,则中位数是中间两个数的平均值。


分数约分问题:

    求出其gcd,让后除之


1 + 2 + 3 +4 +......+ n-1 + n  等价  (1 + n) * n / 2


质数 别称为 素数 只有1 和 它本身 2个除数


极差的意思是一组数中的最大值减去最小值的差。


集合中每个元素 存在 或 不存在,只有 1 种状态,如果集合有n个元素

那么子集就是(2 ** n ) - 1(空集)

那么求其全部子集元素的和:每个元素存在 2 ** n-1 次,相加即可


围成圈的数学问题:

如果 10 人围城圈,10 人下标依次为 1~10,给出数从0加减,左减,右加

如果n < 1,那么 n = n + 10,n > 10, 那么,n = n - 10

so fun problem! 

其实如果循环的话 取余循环数简便!! arr[a%b]


二维数组反转下标规律:

    顺时针90°  nli[j][n - i - 1] = li[i][j]

    逆时针90° nli[n - j - 1][i] = li[i][j]


一个正整数一般可以分为几个互不相同的自然数的和,现在你的任务是将指定的正整数 

 分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。

列举 sum(2,3,4,...,t) > n
lave = sum - n 如果剩余为为2~t中的任何一个数移除它即可,如果是1,t-1即可
如果lave = 0 ,不用操作即可

有趣的位数问题
n的位数
1.string化,求len 
2.from math import log10
位数 = log10(n), 如果n为指数,可以提指数,
例如 2 ** p的位数 = p * log(2) 
当然求位数要ceil下


给出数字组排问题

例如 89,75,8,6,4 (elem 都为string)

组合为最大的数怎么排序?

def compare(a, b):
return int(b + a) - int(a + b)
返回正数,b在a前
返回负数,a在b前
  • 如果返回值为负数,Python 将会认为第一个参数应该排在第二个参数的前面。
  • 如果返回值为零,表示两个参数相等,保持它们原来的顺序。
  • 如果返回值为正数,Python 将会认为第二个参数应该排在第一个参数的前面。
  • 经典定义不会什么都白瞎
完整代码如下:
from functools import cmp_to_key

def compare(a, b):
return int(b + a) - int(a + b)

n = int(input())
s = input().strip().split()
s.sort(key = cmp_to_key(compare))
res = ''.join(s)
if res[0] == '0':
print(0)
else:
print(res)


1 x 1 的正方形组成 n行m列:

矩阵个数:1 * 1的 + 2 * 1的+ 1 * 2的 + ......

化简为:

总长方形个数=(+1)×(+1)1

总个数 = n *(n + 1)* m * (m + 1) // 4


而正方形个数:

总正方形个数=i=1min(n,m)(ni+1)×(mi+1)


所以长方形个数(不包含正方形个数)

矩阵个数 - 正方形个数


格子走,有多少方案?

C(n+m,n)


一: 卡特兰数

假设我们有一个大小为 的队列。我们要计算这个队列的所有可能的随机组合数量。我们可以考虑第一个元素在队列中的位置,它有 种可能的位置。假设我们将第一个元素放在第 个位置,那么剩下的 1 个元素可以在 1 个位置中任意排列。

因此,队列的随机组合数量可以表示为:

()==1(1)×()

其中,() 表示大小为 的队列的随机组合数量。这是一个典型的卡特兰数的递归定义。通过这个递推式,我们可以计算出每个 对应的组合数量。最终,这个序列的结果就是卡特兰数序列。





评论

此博客中的热门博文

binary_search

python 分支语句语法练习

素数筛