2016年第七届蓝桥杯Java程序设计本科B组决赛个人题解汇总:
https://blog.csdn.net/daixinliangwyx/article/details/90169154
第一题
标题:愤怒小鸟
X星球愤怒的小鸟喜欢撞火车!
一根平直的铁轨上两火车间相距 1000 米
两火车 (不妨称A和B) 以时速 10米/秒 相对行驶。
愤怒的小鸟从A车出发,时速50米/秒,撞向B车,
然后返回去撞A车,再返回去撞B车,如此往复....
两火车在相距1米处停车。
问:这期间愤怒的小鸟撞 B 车多少次?
注意:需要提交的是一个整数(表示撞B车的次数),不要填写任何其它内容。
解法:想想小鸟、A车和B车的运动过程来模拟。
首先,小鸟从A车这边出发到B车,假设用时为t1,A车已行驶路程为sa,B车已行驶路程为sb,则当小鸟撞到B车时应该满足:sa+50*t1=1000-sb-10*t2;
然后由于要再计算小鸟从B车这边出发撞到A车的用时,所以需要更新一下A车和B车已行驶路程:sa+=10*t1,sb=10*t1;
再算小年从B车这边出发撞到A车的用时t2:sa+10*t2=1000-sb-50*t2;
再更新一下sa、sb,再算一遍t1......
这样一直重复模拟小鸟撞来撞去的过程,至于计数,就在小鸟每次撞到B车时,判断一下两车的距离再计数。
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int ans = 0;
double sa = 0, sb = 0, t1, t2;
while(1) {
t1 = (1000-sa-sb)*1.0/60;//小鸟从A向B飞的用时
sa += 10 * t1;
sb += 10 * t1;
if(1000-sa-sb < 1) break;//小鸟撞到B车时,两车距离小于1则不符合条件直接break
ans++;
t2 = (1000-sa-sb)*1.0/60;//小鸟撞到B车后从B向A飞的用时
sa += 10 * t2;
sb += 10 * t2;
}
cout << ans << endl;
return 0;
}