求助我精度爆炸了
  • 板块灌水区
  • 楼主dshzsh
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/11/6 21:24
  • 上次更新2023/11/5 08:43:55
查看原帖
求助我精度爆炸了
200116
dshzsh楼主2020/11/6 21:24

rt,P3945

#include<bits/stdc++.h>
#define G 6.67408e-11
#define mit 1e-2
using namespace std;
int n;
class poj
{
	public:
		int spe;
		double m;
		double x[3],v[3],a[3];
		poj(){}
		poj(double xt,double yt,double zt,double mt,double vxt,double vyt,double vzt,int st)
		{
			m=mt,x[0]=xt,x[1]=yt,x[2]=zt;spe=st;
			v[0]=vxt,v[1]=vyt,v[2]=vzt;
			a[0]=a[1]=a[2]=0;
		}
		void move()
		{
			for(int i=0;i<=2;i++)
			{
				v[i]+=a[i]*mit;
				x[i]+=v[i]*mit;
			}
		}
};
poj a[40];
double js(poj a,poj b)
{
	return sqrt((a.x[0]-b.x[0])*(a.x[0]-b.x[0])+(a.x[1]-b.x[1])*(a.x[1]-b.x[1])+(a.x[2]-b.x[2])*(a.x[2]-b.x[2]));
}
void gx(poj &x)
{
	x.a[0]=x.a[1]=x.a[2]=0;
	for(int i=1;i<=n;i++)
	{
		if(i!=x.spe)
		{
			double jl=js(x,a[i]);
			for(int j=0;j<=2;j++)
				x.a[j]+=G*a[i].m*(a[i].x[j]-x.x[j])/(jl*jl*jl);
		}
	}
}
void moveobj()
{
	for(int j=1;j<=n;j++)
		gx(a[j]);
	for(int j=1;j<=n;j++)
		a[j].move();
}
int main()
{
	double t;
	scanf("%d%lf",&n,&t);
	for(int i=1;i<=n;i++)
	{
		double x,y,z,m,vx,vy,vz;
		scanf("%lf%lf%lf%lf%lf%lf%lf",&x,&y,&z,&m,&vx,&vy,&vz);
		a[i]=poj(x,y,z,m,vx,vy,vz,i);
	}
	while(t>0)
	{
		//for(int j=1;j<=n;j++)
		//	printf("%lf %lf %lf\n",a[j].x[0],a[j].x[1],a[j].x[2]);
		//system("pause");
		//system("cls");
		moveobj();
		t=t-mit;
	}
	for(int j=1;j<=n;j++)
		printf("%lf %lf %lf\n",a[j].x[0],a[j].x[1],a[j].x[2]);
	return 0;
}

放在题目版里真的没人

2020/11/6 21:24
加载中...