Blog
物理题。如果您的英语实在太差,请看我的翻译。
数据共有n组。对于每组数据,物体运动存在5个物理量:初速度\(u\),末速度\(v\),加速度\(a\),位移\(x\),时间\(t\)。给出其中三个量,求剩余两个量。
输入输出规则:先输入一个p。
\(p=1\)时:给出\(u,v,t\),输出\(s,a\);
\(p=2\)时:给出\(u,v,a\),输出\(s,t\);
\(p=3\)时:给出\(u,a,s\),输出\(v,t\);
\(p=4\)时:给出\(v,a,s\),输出\(u,t\);
运动学有3个众所周知的公式:
\(s=u·t+0.5·a·t^2\);
\(v=u+a·t\);
\(v^2-u^2=2·a·s\);
利用3个公式变形,分类讨论:
\(u=v-a·t;\)
\(a=(v-u)/t;\)
\(t=(v-u)/a;\)
\(u=\sqrt{v^2-2·a·s};\)
\(v=\sqrt{u^2+2·a·s};\)
\(a=(v^2-u^2)/(2·s);\)
\(s=(v^2-u^2)/(2·a);\)
\(s=(u+v)/(2·t);\)
用一个switch(if也行)进行分类讨论,看看给出的是哪几个量,套以上公式进行求解。
记得用
printf("%.3lf",ans);
保留3位小数。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int p,num=0;
cin>>p;
while(p)//p=0时退出循环
{
num++;
double u,v,a,t,s;
switch(p)
{
case 1:
cin>>u>>v>>t;
a=(v-u)/t;
s=u*t+0.5*a*t*t;
printf("Case %d: %.3lf %.3lf\n",num,s,a);
break;
case 2:
cin>>u>>v>>a;
t=(v-u)/a;
s=u*t+0.5*a*t*t;
printf("Case %d: %.3lf %.3lf\n",num,s,t);
break;
case 3:
cin>>u>>a>>s;
v=sqrt(u*u+2*a*s);
t=(v-u)/a;
printf("Case %d: %.3lf %.3lf\n",num,v,t);
break;
case 4:
cin>>v>>a>>s;
u=sqrt(v*v-2*a*s);
t=(v-u)/a;
printf("Case %d: %.3lf %.3lf\n",num,u,t);
break;
}
cin>>p;//循环读入
}
return 0;
}