信息学奥赛一本通 1050:骑车与走路 | OpenJudge NOI 1.4 12:骑车与走路

【题目链接】

ybt 1050:骑车与走路
OpenJudge NOI 1.4 12:骑车与走路

【题目考点】

1. 两浮点型量判断相等

由于浮点型量在内存中以二进制形式表示,很多数据并不能精确表示(如0.3),实际存储的是一个近似值。而由于计算过程不同,对于数学意义上相等的两个数字,在实际存储时会有差别,以至于用==判定两个数是否相等时,表达式的值是false。
例:

	double a = 0.3, b = 0.1+0.2;
	cout<<(a==b);//会输出0,表示在程序层面,不认为a与b是相等的。

要解决这一问题,就是要忽略浮点型量之间的细微差别。
只要两个浮点型量之间相差的值很小,就认为是相等的。
判断浮点型量a,b是否相等的表达式:fabs(a-b) < 0.00001(右侧是一个很小的数字即可。)

2. if…else if…else语句

【解题思路】

设总距离为s米

  • 已知步行速度1.2米每秒,步行所用时间 t w = s / 1.2 t_w = s / 1.2 tw=s/1.2
  • 已知骑车前后所用的时间为 27 + 23 = 50 27+23=50 27+23=50秒,骑车速度3米每秒,骑车所用时间 t b = s / 3 + 50 t_b = s / 3 + 50 tb=s/3+50
  • 比较 t w t_w tw t b t_b tb,输出对应的字符串。
    由于浮点型量相等时可能被程序认为是不等的(如数学上a等于b但实际判断时a>b返回true),所以应先判断二者是否相等。

【题解代码】

写法1:先判断两数是否相等
#include<bits/stdc++.h>
using namespace std;
int main()
{
    double s, tw, tb;//s:距离,tw:走路所用时间,tb:骑车所用时间 
    cin >> s;
    tw = s / 1.2;
    tb = 27 + 23 + s / 3;
    if(fabs(tw - tb) < 0.0001)//判断浮点型量tw与tb是否相等 
        cout << "All";
    else if(tw > tb)//走路用的时间比骑车多 
        cout << "Bike";//骑车更快 
    else//骑车用的时间比走路更多 
        cout << "Walk";//走路更快 
    return 0;
}
写法2:先判断两数是否一个比另一个大
#include<bits/stdc++.h>
using namespace std;
int main()
{
    double s, tw, tb;//s:距离,tw:走路所用时间,tb:骑车所用时间 
    cin >> s;
    tw = s / 1.2;
    tb = 27 + 23 + s / 3;
    if(tw > tb)//走路用的时间比骑车多 
        cout << "Bike";//骑车更快 
    else if(tw < tb)//骑车用的时间比走路更多 
        cout << "Walk";//走路更快 
    else//判断浮点型量tw与tb是否相等 
        cout << "All";
    return 0;
}
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值