1038:苹果和虫子
1038:蘋果和蟲子
時(shí)間限制: 1000 ms 內(nèi)存限制: 65536 KB【題目描述】
你買了一箱n個(gè)蘋果,很不幸的是買完時(shí)箱子里混進(jìn)了一條蟲子。蟲子每x小時(shí)能吃掉一個(gè)蘋果,假設(shè)蟲子在吃完一個(gè)蘋果之前不會(huì)吃另一個(gè),那么經(jīng)過(guò)y小時(shí)你還有多少個(gè)完整的蘋果?
【輸入】
輸入僅一行,包括n,x和y(均為整數(shù))。
【輸出】
輸出也僅一行,剩下的蘋果個(gè)數(shù)。
【輸入樣例】
10 4 9【輸出樣例】
7說(shuō)明:
主要考查用編程解決數(shù)學(xué)問(wèn)題。
不過(guò)這題存在一個(gè)問(wèn)題,不知官方會(huì)不會(huì)修正,后面會(huì)講述此問(wèn)題。
思路分析:
用題目的樣例,可以理解為有10個(gè)蘋果,蟲子每4小時(shí)吃掉一個(gè)蘋果,經(jīng)過(guò)9小時(shí)還有7個(gè)完整的蘋果。
這題應(yīng)注意題目的關(guān)鍵部分:第一個(gè)是剩余的是完整的蘋果,那么被蟲子咬了一口都不算完整;第二個(gè)是蟲子在吃完一個(gè)蘋果之前不會(huì)吃另一個(gè)。
數(shù)學(xué)的方法可以這么解:
10-9÷4=10-2.5=7.5
即還剩7.5個(gè)蘋果,但完整的只有7個(gè),那0.5個(gè)(半個(gè))不算完整。所以輸出的結(jié)果是7。
很明顯,是把計(jì)算出的結(jié)果去掉小數(shù)部分,只剩整數(shù)部分。解決這一問(wèn)題,只需強(qiáng)制轉(zhuǎn)換為整型即可。不過(guò)在運(yùn)算中存在除法時(shí),要考慮數(shù)據(jù)類型問(wèn)題,如果變量的類型都為整型時(shí),那么9 / 4的結(jié)果為2,10 - 2的結(jié)果是8。下面用兩種方法來(lái)解決這一問(wèn)題:
變量都聲明為double類型:
(整型)(n - y / x)
變量都聲明為整型:
(整型)(n - 1.0 * y / x)
或者使用向上取整函數(shù)ceil。
不過(guò)這些方法的本質(zhì)是一樣的,都是讓數(shù)據(jù)變?yōu)楦↑c(diǎn)型進(jìn)行運(yùn)算。
如果把變量聲明為整型,因?yàn)榇祟悊?wèn)題不會(huì)存在負(fù)數(shù),應(yīng)該優(yōu)先選擇unsigned類型,而不是int。
易錯(cuò)點(diǎn):
本題對(duì)于數(shù)據(jù)的說(shuō)明并不嚴(yán)謹(jǐn),如果y的值足夠大,當(dāng)y / x > n時(shí),結(jié)果為負(fù)數(shù)。顯然這是不可能的,這種問(wèn)題不會(huì)存在負(fù)數(shù)的情況,就算蘋果全被蟲子吃光,結(jié)果也為0而已。
而本題屬于順序結(jié)構(gòu)的題,按照學(xué)習(xí)階梯來(lái)看,學(xué)生還沒(méi)學(xué)if語(yǔ)句和條件運(yùn)算符等知識(shí)點(diǎn)。
經(jīng)過(guò)測(cè)試,提交后第4個(gè)測(cè)試點(diǎn)沒(méi)有通過(guò)。想全部通過(guò),一般還是要用if語(yǔ)句或條件運(yùn)算符等。
所以,如果使用if語(yǔ)句,變量的類型應(yīng)選擇int或double,而不是unsigned。因?yàn)楫?dāng)y / x > n時(shí),結(jié)果為負(fù)數(shù),此時(shí)就可以通過(guò)if來(lái)判斷了,而選擇unsigned類型就不是那么方便了。
代碼中會(huì)展示這兩種方法。
求解過(guò)程:
聲明3個(gè)unsigned類型變量n、x、y。輸入3個(gè)整數(shù)給變量n、x、y。根據(jù)公式輸出運(yùn)算結(jié)果。運(yùn)行結(jié)果:
前一種方法結(jié)算的結(jié)果存在負(fù)數(shù),所以有一個(gè)測(cè)試點(diǎn)沒(méi)有通過(guò)。后一種方法使用了if條件語(yǔ)句,是把結(jié)果先保存在變量t中,如果變量t為負(fù)數(shù),則讓t變?yōu)?。int(n - y * 1.0 / x)這條語(yǔ)句的int可以去掉,因?yàn)檫@條語(yǔ)句的結(jié)果是賦給一個(gè)int類型變量t,會(huì)自動(dòng)轉(zhuǎn)換成int類型。參考代碼 - C++:
此代碼有一個(gè)測(cè)試點(diǎn)沒(méi)有通過(guò)。
#include <iostream> using namespace std; int main() {unsigned n, x, y;cin >> n >> x >> y;cout << unsigned(n - y * 1.0 / x);return 0; }參考代碼 - C語(yǔ)言:
此代碼有一個(gè)測(cè)試點(diǎn)沒(méi)有通過(guò)。
#include <stdio.h> int main() {double n, x, y;scanf("%lf %lf %lf", &n, &x, &y);printf("%u", (unsigned)(n - y / x));return 0; }總結(jié)
以上是生活随笔為你收集整理的1038:苹果和虫子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Elasticsearch开启安全认证详
- 下一篇: java 创建Reader_Buffer