仅供本人使用,其他人看看参考下就好
1. 知道三角形三个顶点坐标计算三角形面积:三个顶点A(x1,y1),B(x2,y2),C(x3,y3);S=1/2*(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
2.两个集合A{1,2,3}B{2,3,4},A+B={1,2,3,4},A-B={1}是表示除去和B中相同的元素后还剩下的元素
3.错排公式:D(n)=(n-1)*(D(n-1)+D(n-2))
当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.
第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;
第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有D(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有D(n-1)种方法;
综上得到
D(n) = (n-1) [D(n-2) + D(n-1)]
4.阶乘位数的计算方法一:可以将n!表示成10的次幂,即n!=10^M(10的M次方)则不小于M的最小整数就是 n!的位数,对该式两边取对数,有 M =log10^n!
即:
M = log10^1+log10^2+log10^3...+log10^n
循环求和,就能算得M值,该M是n!的精确位数代码:
#include<map> #include<stack> #include<queue> #include<cmath> #include<string> #include<cstdio> #include<vector> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=1e5; typedef long long ll; ll a[N]; int main() { int test; scanf("%d",&test); while(test--) { int n,d=0,i; double dd=0.0; scanf("%d",&n); for(i=1;i<=n;i++) dd+=(double)log10(i); printf("%d\n",(int)dd+1); } return 0; }
方法二
利用斯特林(Stirling)公式的进行求解。下面是推导得到的公式:
res=(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );
当n=1的时候,上面的公式不适用,所以要单独处理n=1的情况!5.求n!末尾0的个数
思路:
一个数 n 的阶乘末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数
而 2 的个数是远远多余 5 的个数的, 因此求出 5 的个数即可
题解中给出的求解因子 5 的个数的方法是用 n 不断除以 5, 直到结果为 0
然后把中间得到的结果累加. 例如, 100/5 = 20, 20/5 = 4, 4/5 = 0
则 1 到 100 中因子 5 的个数为 (20 + 4 + 0) = 24 个
即 100 的阶乘末尾有 24 个 0. 其实不断除以 5
是因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中
每间隔 5 个数又有一个可以被 25 整除, 故要再除一次, ... 直到结果为 0, 表示没有能继续被 5 整除的数了.
代码:
#include<queue> #include<stack> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; int main() { int test; scanf("%d",&test); while(test--) { int n; int i,j,k=0,ans=0,ans1=0; scanf("%d",&n); while(n>0) { ans+=n/5; n/=5; } printf("%d\n",ans); } return 0; }
6.求任何数字n在一定周期t中最小正整数:
int ans = ((n % t)+t) % t;
7.三角形外接圆半径计算方法:R=(a*b*c)/(4*s),s=sqrt(p*(p-a)*(p-b)*(p-c)),p=(a+b+c)/2.0;
代码实现:
#include<map> #include<stack> #include<cmath> #include<queue> #include<string> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; #define ll long long #define pi acos(-1.0) const int maxn=1e5; const int mod=1e9+7; const int inf=0x3f3f3f; char s[maxn]; int main() { double a,b,c; while(scanf("%lf%lf%lf",&a,&b,&c)!=EOF) { double ans=a*b*c; double p=(a+b+c)/2.0; double s=sqrt(p*(p-a)*(p-b)*(p-c)); double r=ans/(4.0*s); printf("%.2lf\n",r); } return 0; }