有自己整理的,也有转别人的,方便查看
知一整数数,构造两个整数,使这三个数满足勾股定律
int gougu(int a,int &b,int &c)
{
if(a<=2)
{
return 0;
}
if(a&1)
{
b=(a*a)/2;
c=b+1;
}
else
{
b=(a*a)/4-1;
c=(a*a)/4+1;
}
return 1;
}
知三点坐标求这个三个点构成的三角形的周长、面积、外心坐标和重心坐标
面积使用海伦公式求解
外心坐标是看的一篇博客 http://blog.sina.com.cn/s/blog_7a92dda00101f2kp.html ,有详细的求解过程,还有内心坐标
重心坐标就简单了 (x1+x2+x3)/3 , (y1+y2+y3)/3
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#define eps 1e-9
#define PI 3.141592653589793
#define bs 1000000007
#define bsize 256
#define MEM(a) memset(a,0,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
struct node
{
double x,y;
};
double len(node n1,node n2)
{
double ans;
ans=sqrt(pow(n1.x-n2.x,2)+pow(n1.y-n2.y,2));
return ans;
}
int main()
{
double l,s,l1,l2,l3;
node n1,n2,n3,a1,a2;
scanf("%lf %lf",&n1.x,&n1.y);
scanf("%lf %lf",&n2.x,&n2.y);
scanf("%lf %lf",&n3.x,&n3.y);
//三边长度
l1=len(n1,n2);
l2=len(n1,n3);
l3=len(n2,n3);
//周长
l=l1+l2+l3;
printf("%.2lf\n",l);
//面积
double p;
p=l/2.0;
s=sqrt(p*(p-l1)*(p-l2)*(p-l3));
printf("%.2lf\n",s);
//外心坐标
a1.x=(pow(n1.x,2)*(n2.y-n3.y)+pow(n2.x,2)*(n3.y-n1.y)+pow(n3.x,2)*(n1.y-n2.y)-(n1.y-n2.y)*(n2.y-n3.y)*(n3.y-n1.y))/(2*(n1.x*(n2.y-n3.y)+n2.x*(n3.y-n1.y)+n3.x*(n1.y-n2.y)));
a1.y=(-pow(n1.y,2)*(n2.x-n3.x)-pow(n2.y,2)*(n3.x-n1.x)-pow(n3.y,2)*(n1.x-n2.x)+(n1.x-n2.x)*(n2.x-n3.x)*(n3.x-n1.x))/(2*(n1.x*(n2.y-n3.y)+n2.x*(n3.y-n1.y)+n3.x*(n1.y-n2.y)));
printf("%.2lf %.2lf\n",a1.x,a1.y);
//重心坐标
a2.x=(n1.x+n2.x+n3.x)/3;
a2.y=(n1.y+n2.y+n3.y)/3;
printf("%.2lf %.2lf\n",a2.x,a2.y);
return 0;
}
俩圆相交面积
struct point{
double x, y;
};
double dis(point a, point b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double Area(point c1, double r1, point c2, double r2){
double tmpa = r1, tmpb = r2;
if(tmpa < tmpb) swap(tmpa,tmpb);
double res = 0;
double dd = dis(c1, c2);
if(dd > tmpa -tmpb && dd < tmpa + tmpb){
double cos1 = (tmpa*tmpa+dd*dd-tmpb*tmpb)/(2*tmpa*dd);
double cos2 = (tmpb*tmpb+dd*dd-tmpa*tmpa)/(2*tmpb*dd);
double th1 = 2*acos(cos1);
double th2 = 2*acos(cos2);
double s1 = 0.5*tmpa*tmpa*sin(th1);
double s2 = 0.5*tmpb*tmpb*sin(th2);
double s3 = (th1/2)*tmpa*tmpa;
double s4 = (th2/2)*tmpb*tmpb;
res = s3+s4-s1-s2;
}
else if(dd <= tmpa - tmpb)
res = pi*tmpb*tmpb;
return res;
}
把一个数转化为-n进制,每次模-n记录,除-n,类似转二进制,然后从最低位开始,遇到位数小于0的就加上个n,然后高一位加1,类似借位
int ans[100],len;
int fujinzhi(int n,int x)
{
int j;
memset(ans,0,sizeof(ans));
len=0;
if(n==0)
{
ans[0]=0;
len=1;
return 0;
}
while(n)
{
ans[len++]=n%x;
n/=x;
}
for(j=0;j<100;j++)
{
if(ans[j]<0)
{
ans[j]+=-1*x;
ans[j+1]++;
}
else if(ans[j]>=-1*x)
{
ans[j]-=-1*x;
ans[j+1]--;
}
}
while(ans[len]!=0)
len++;
/* for(j=len-1;j>=0;j--)
printf("%d",ans[j]);
printf("\n");*/
return 0;
}
大数求卡特兰数
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
#define eps 1e-9
#define PI 3.141592653589793
#define bs 1000000007
#define bsize 256
#define MEM(a) memset(a,0,sizeof(a))
#define inf 0x3f3f3f3f
#define rep(i,be,n) for(i=be;i<n;i++)
typedef long long ll;
using namespace std;
const int MAXN=1000;
int mult(int *a,int &len,int x)
{
int i=0,temp=0;
for(;i<len;i++)
{
temp+=a[i]*x;
a[i]=temp%MAXN;
temp/=MAXN;
};
while(temp!=0)
{
a[len++]=temp%MAXN;
temp/=MAXN;
}
return 0;
}
int division(int *a,int &len,int x)
{
int i=len-1,temp=0;
for(;i>=0;i--)
{
temp+=a[i];
a[i]=temp/x;
temp%=x;
temp*=MAXN;
}
for(;len-1>=0;len--)
{
if(a[len-1]!=0)
break;
}
return 0;
}
int ans[150][1000];
int len[150];
int main()
{
int i,j,t,a[1000],len1;
ans[0][0]=ans[1][0]=1;
len[0]=len[1]=1;
for(i=2;i<=100;i++)
{
MEM(a);
len1=len[i-1];
for(j=0;j<len1;j++)
{
a[j]=ans[i-1][j];
}
mult(a,len1,4*i-2);
division(a,len1,i+1);
for(j=0;j<len1;j++)
{
ans[i][j]=a[j];
}
len[i]=len1;
}
while(scanf("%d",&t))
{
if(t==-1)
break;
// printf("%d\n",len[t]);
for(i=len[t]-1;i>=0;i--)
{
if(i==len[t]-1);
else if(ans[t][i]<10)
printf("00");
else if(ans[t][i]<100)
printf("0");
printf("%d",ans[t][i]);
}
printf("\n");
}
return 0;
}
公式:
1/p+1/p^2+1/p^3+1/p^4+...=1/(p-1) (p!=1)
几何分布:(转自http://blog.youkuaiyun.com/baidu_35643793/article/details/76267672)
先给出一个几何分布的分布列:
其中,
x表示第x次抽中
p表示第中的概率
对于每一次抽奖:中奖概率p为3/4,不中奖概率(1-p)为1/4;
1.什么是几何分布
简言之,几何分布就是前n次都没有抽中,第n+1次抽中的概率;
2.几何分布的期望
假设,对于每一次抽奖,抽中的概率为p,未抽中的概率为(1-p);
则期望为1/p;
一维离散性概率分布的期望计算公式为:
所以用计算公式所得结果与1/p相比较,更加直观,当然1/p是根据推导公式得来的;