怎么也调不对了……
查看原帖
怎么也调不对了……
448887
cancan123456楼主2021/4/6 20:24
#include <cstdio>
#include <cmath>
using namespace std;
#define G 6.67408e-11
#define t 0.01
#define maxn 35
#define maxt 100
int n;
double T;
struct Star {
	double m;
	double x, y, z;
	double vx, vy, vz;
	double ax = 0.0, ay = 0.0, az = 0.0;
	double Fx = 0.0, Fy = 0.0, Fz = 0.0;
	void get() {
		// 坐标
		scanf("%lf %lf %lf", &x, &y, &z);
		// 质量
		scanf("%lf", &m);
		// 初速度
		scanf("%lf %lf %lf", &vx, &vy, &vz); 
	}
	void put() {
		printf("%.12lf %.12lf %.12lf\n", x, y, z);
	}
} star[maxn];
void cal() {
	for (int i = 0; i < n; i++) {
		star[i].ax = star[i].ay = star[i].az = 0.0;
		for (int j = 0; j < n; j++) {
			if (i != j) {
				double r2 = \
				(star[i].x - star[j].x) * (star[i].x - star[j].x) + \
				(star[i].y - star[j].y) * (star[i].y - star[j].y) + \
				(star[i].z - star[j].z) * (star[i].z - star[j].z);
				double a = -G * star[j].m / r2;
				double r = sqrt(r2);
				star[i].ax += a * (star[i].x - star[j].x) / r;
				star[i].ay += a * (star[i].y - star[j].y) / r;
				star[i].az += a * (star[i].z - star[j].z) / r;
			}
		}
		star[i].x += star[i].vx * t;
		star[i].y += star[i].vy * t;
		star[i].z += star[i].vz * t;
		/*
		star[i].x += star[i].vx * t + 0.5 * star[i].ax * t * t;
		star[i].y += star[i].vy * t + 0.5 * star[i].ay * t * t;
		star[i].z += star[i].vz * t + 0.5 * star[i].az * t * t;
		*/
		star[i].vx += star[i].ax * t;
		star[i].vy += star[i].ay * t;
		star[i].vz += star[i].az * t;
	}
}
int main() {
	scanf("%d %lf", &n, &T);
	for (int i = 0; i < n; i++) {
		star[i].get();
	}
	for (; T > 0; T -= t) {
		cal();
	}
	for (int i = 0; i < n; i++) {
		star[i].put();
	}
	return 0;
}

一直卡在22, 24, 26分上

2021/4/6 20:24
加载中...