題目描述
陶陶家的院子里有一棵蘋果樹,每到秋天樹上就會(huì)結(jié)出?1010?個(gè)蘋果。蘋果成熟的時(shí)候,陶陶就會(huì)跑去摘蘋果。陶陶有個(gè)?3030?厘米高的板凳,當(dāng)她不能直接用手摘到蘋果的時(shí)候,就會(huì)踩到板凳上再試試。
現(xiàn)在已知?1010?個(gè)蘋果到地面的高度,以及陶陶把手伸直的時(shí)候能夠達(dá)到的最大高度,請(qǐng)幫陶陶算一下她能夠摘到的蘋果的數(shù)目。假設(shè)她碰到蘋果,蘋果就會(huì)掉下來。
輸入格式
輸入包括兩行數(shù)據(jù)。第一行包含?1010?個(gè)?100100?到?200200?之間(包括?100100?和?200200?)的整數(shù)(以厘米為單位)分別表示?1010?個(gè)蘋果到地面的高度,兩個(gè)相鄰的整數(shù)之間用一個(gè)空格隔開。第二行只包括一個(gè)?100100?到?120120?之間(包含?100100?和?120120?)的整數(shù)(以厘米為單位),表示陶陶把手伸直的時(shí)候能夠達(dá)到的最大高度。
輸出格式
輸出包括一行,這一行只包含一個(gè)整數(shù),表示陶陶能夠摘到的蘋果的數(shù)目。
輸入輸出樣例
輸入 #1復(fù)制
100 200 150 140 129 134 167 198 200 111 110
輸出 #1復(fù)制
5
說明/提示
【題目來源】
NOIP 2005 普及組第一題
這個(gè)題目很簡(jiǎn)單,但是可以對(duì)代碼進(jìn)行多次優(yōu)化。
首先,常規(guī)讀入高度和身高,這個(gè)沒什么可優(yōu)化的。
接下來分兩步,一個(gè)是比較,一個(gè)是計(jì)算。
常規(guī)做法基本上是 if(height[i] <= H + 30)s++;
但是,對(duì)于部分要卡常的題目來說,可能會(huì)爆掉,而且每次都調(diào)用寄存器來計(jì)算 H+30,很顯然是一種浪費(fèi)。
首先我們可以像多數(shù)題解那樣,在讀入 H 之后,直接對(duì)它進(jìn)行 +=30的操作。
但是實(shí)際上,比較的行為也可以簡(jiǎn)化。
if(height[i] <= H )s++; 電腦計(jì)算的時(shí)候分為三步:
-
計(jì)算 height[i] <= H 的值 (true | false)
-
調(diào)用if判斷里面表達(dá)式的值是否為真
-
若真,對(duì)s進(jìn)行s+=1的運(yùn)算。
我們簡(jiǎn)化時(shí)可以發(fā)現(xiàn),s每次加的值都是恒定的 1 。
聯(lián)想到 : true == 1 , false == 0 , 我們可以直接將邏輯值的結(jié)果加給s。
也即?s+=!(H<height[i]);文章來源:http://www.zghlxwxcb.cn/news/detail-426423.html
CPP代碼如下文章來源地址http://www.zghlxwxcb.cn/news/detail-426423.html
#include <iostream>
using namespace std;
int height[20],H,s;
int main()
{
for(int i=0;i<10;i++)cin >> height[i];
cin >> H;
H += 30;
for(int i=0;i<10;i++)s+=!(H<height[i]);
cout << s;
}
到了這里,關(guān)于P1046 [NOIP2005 普及組] 陶陶摘蘋果的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!