信息学奥赛一本通 1050:骑车与走路 | OpenJudge NOI 1.4 12
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1050:骑车与走路 | OpenJudge NOI 1.4 12
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【題目鏈接】
ybt 1050:騎車與走路
OpenJudge NOI 1.4 12:騎車與走路
【題目考點(diǎn)】
1. 兩浮點(diǎn)型量判斷相等
由于浮點(diǎn)型量在內(nèi)存中以二進(jìn)制形式表示,很多數(shù)據(jù)并不能精確表示(如0.3),實(shí)際存儲(chǔ)的是一個(gè)近似值。而由于計(jì)算過程不同,對(duì)于數(shù)學(xué)意義上相等的兩個(gè)數(shù)字,在實(shí)際存儲(chǔ)時(shí)會(huì)有差別,以至于用==判定兩個(gè)數(shù)是否相等時(shí),表達(dá)式的值是false。
例:
要解決這一問題,就是要忽略浮點(diǎn)型量之間的細(xì)微差別。
只要兩個(gè)浮點(diǎn)型量之間相差的值很小,就認(rèn)為是相等的。
判斷浮點(diǎn)型量a,b是否相等的表達(dá)式:fabs(a-b) < 0.00001(右側(cè)是一個(gè)很小的數(shù)字即可。)
2. if…else if…else語句
【解題思路】
設(shè)總距離為s米
- 已知步行速度1.2米每秒,步行所用時(shí)間tw=s/1.2t_w = s / 1.2tw?=s/1.2
- 已知騎車前后所用的時(shí)間為27+23=5027+23=5027+23=50秒,騎車速度3米每秒,騎車所用時(shí)間tb=s/3+50t_b = s / 3 + 50tb?=s/3+50
- 比較twt_wtw?與tbt_btb?,輸出對(duì)應(yīng)的字符串。
由于浮點(diǎn)型量相等時(shí)可能被程序認(rèn)為是不等的(如數(shù)學(xué)上a等于b但實(shí)際判斷時(shí)a>b返回true),所以應(yīng)先判斷二者是否相等。
【題解代碼】
解法1:
#include<bits/stdc++.h> using namespace std; int main() {double s, tw, tb;//s:距離,tw:走路所用時(shí)間,tb:騎車所用時(shí)間 cin>>s;tw = s / 1.2;tb = 27 + 23 + s / 3;if (fabs(tw - tb) < 0.0001)//判斷浮點(diǎn)型量tw與tb是否相等 cout<<"All";else if (tw > tb)//走路用的時(shí)間比騎車多 cout<<"Bike";//騎車更快 else if (tw < tb)//騎車用的時(shí)間比走路更多 cout<<"Walk";//走路更快 return 0; }總結(jié)
以上是生活随笔為你收集整理的信息学奥赛一本通 1050:骑车与走路 | OpenJudge NOI 1.4 12的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1159:斐波那契数列
- 下一篇: 信息学奥赛一本通(2029:【例4.15