题目: 在33米的水平直钢管中 第3米 第6米 第19米 第22米 第26米 各有一个钢球(直径同钢管内径,能滑动 0摩擦 )刚开始钢球都静止, 突然5个钢球都都以1米每秒的速度开始运动 ,碰撞后速度不变 方向改变 钢球起始速度方向不定,求所有钢球都离开钢管的最大时间 以及最初5钢球的起始速度方向 (0能量 速度损失 所有直径大小可以忽略不计)
#include <stdio.h>;
#include <math.h>
float currenpoint(double s1,int v1,double s2,int v2,double s3,int v3,double s4,int v4,double s5,int v5)
{
int i=0;
double t=0;
for(i=0;i<10000;i++)
{
s1=s1+0.01*i*v1;
s2=s2+0.01*i*v2;
s3=s3+0.01*i*v3;
s4=s4+0.01*i*v4;
s5=s5+0.01*i*v5;
t=0.01*i;
if((s1>=33|s1<=0)&&(s2>=33|s2<=0)&&(s3>=33|s3<=0)&&(s4>=33|s4<=0)&&(s5>=33|s5<=0))
break;
if (fabs(s1-s2)<0.01)
currenpoint(s1,-1*v1,s2,-1*v2,s3,v3,s4,v4,s5,v5);
if (fabs(s2-s3)<0.01)
currenpoint(s1,v1,s2,-1*v2,s3,-1*v3,s4,v4,s5,v5);
if (fabs(s3-s4)<0.01)
currenpoint(s1,v1,s2,v2,s3,-1*v3,s4,-1*v4,s5,v5);
if (fabs(s4-s5)<0.01)
currenpoint(s1,v1,s2,v2,s3,v3,s4,-1*v4,s5,-1*v5);
}
return t;
}
double main()
{
int i=0,j=0,v1=0,v2=0,v3=0,v4=0,v5=0;
double t[32]={0},max=0;
double s1=3.0,s2=6.0,s3=19.0,s4=22.0,s5=26.0;
for(i=0;i<31;i++)
{
v1=(i/1)%2;
v2=(i/2)%2;
v3=(i/4)%2;
v4=(i/8)%2;
v5=(i/16)%2;
if (v1==0)
v1=-1;
if (v2==0)
v2=-1;
if (v3==0)
v3=-1;
if (v4==0)
v4=-1;
if (v5==0)
v5=-1;
*(t+i)=currenpoint(s1,v1,s2,v2,s3,v3,s4,v4,s5,v5);
}
for(j=0;j<31;j++)
printf("%lf\n",t[j]);
}
求修改 或者讲解下 为什么程序得不到正确答案 或者给我个正确的解决思路 都可以 万分感谢