題意描述:
英國天文學家愛丁頓很喜歡騎車。據說他為了炫耀自己的騎車功力,還定義了乙個「愛丁頓數」 e ,即滿足有 e 天騎車超過 e 英里的最大整數 e。據說愛丁頓自己的 e 等於87。
現給定某人 n 天的騎車距離,請你算出對應的愛丁頓數 e(≤n)。
輸入格式:
輸入第一行給出乙個正整數 n (≤10^5 ),即連續騎車的天數;第二行給出 n 個非負整數,代表每天的騎車距離。
輸出格式:
在一行中給出 n 天的愛丁頓數。
輸入樣例:
10
6 7 6 9 3 10 8 2 7 8
輸出樣例:
6
解題思路:alice: 你看懂了嘛,(`^´)ノ
bob: 就是看一看列表中有e個元素大於e的最大e值唄。
alice: 這個樣例怎麼就是6呢? 排下序看看,2 3 6 67 7 8 8 9 10
,大於6的元素有6個,大於7的元素只有4個,大於5的元素有8個,不過多於的3個並沒有用。因為是e個元素大於e
bob: 對呀,你有什麼想法嗎?
alice: 先對輸入的列表排序,然後我們要找 e 個元素 大於 e 的最大值,先找e個元素,然後看著e個元素是不是都大於e。等等,列表排過序了的,判斷e個元素是不是都大於e只需要判斷這e個元素的最小值是不是都大於e就好了。
bob: (¦3」∠) 你慢點說。。
alice:就是從左向右遍歷整個列表呀,以當前元素後面的所有元素最為那 e 個元素,判斷這些元素是不是都大於 e 就好了。我們從左往右遍歷,當前元素後面的元素會越來越少,所以第一次滿足條件的 e 就是最大的 e。就像這樣:
還有這種:
bob: 原來是這樣!(*´▽`)ノノ
alice: 哈哈哈哈,我要超過你了。
bob: 你看你的圖,e的取值區不到1 和 10呀。比如說只有乙個元素是1 那就沒有 1 個元素大於 1, e只能是0了,這樣有0個元素大於0。 如果有10個11,那就有10個元素都大於10了。再加點判斷就完整了。
alice: (・ω・`ll)看把你能的,我早就想到了好不好?!
bob: ︿( ̄︶ ̄)︿
**:
def
main()
: n =
int(
input()
)# 接收輸入的整數 n
data =
[int
(x)for x in
input()
.split()]
# 接收 輸入的n個非負整數
data.sort(
)# 把這n個非負整數排一下序
answer =
0# 用來儲存答案,就是滿足 有e個元素大於e的最大e值
iflen
(data)==1
:# 如果data中僅有乙個元素,最多也就是有 1 個元素大於 1嘍,所以判斷一下這個唯一的元素和 1 的關係就好了。
if data[0]
>1:
# 由於answer 的初始值為0, 所以這裡的 if 語句就不必再寫else語句將answer 置零了。
answer =
1else
:# 如果data中有多個元素
if data[0]
>
len(data)
:# 排序後,data[0]就是整個列表中最小元素,如果data[0] > len(data),
# 就是說data中所有的元素都大於len(data),也就是說乙個列表中的每個元
# 素的值都大於這個列表的長度。比如說 [6,6,6] > len([6,6,6]) == 3
# 這樣,滿足 有e個元素大於e 的最大e值就是列表的長度。
answer =
len(data)
else
:# 否則,就是說 滿足有e個元素大於e 的最大e值 應該在1和len(data)之間。
for index in
range
(len
(data)-1
):#對於列表中的每個元素
if data[index +1]
>
len(data)-1
- index:
# 如果這個元素後面的元素都大於e,也就是說有e個元素大於 e
# 那它後面所有元素的長度就是就是e
# 因為是從data[index+1]開始計算的,所以第一次滿足這個條件的就是最大的
answer =
len(data)-1
- index
break
# 記得要break 出去
print
(answer)
# 統一輸出答案
return
if __name__ ==
'__main__'
: main(
)
易錯點:
1
1
1
2
3
4 5 6
總結: 1060 愛丁頓數
英國天文學家愛丁頓很喜歡騎車。據說他為了炫耀自己的騎車功力,還定義了乙個 愛丁頓數 e,即滿足有e天騎車超過e英里的最大整數e。據說愛丁頓自己的e等於87。現給定某人n天的騎車距離,請你算出對應的愛丁頓數e n 輸入格式 輸入第一行給出乙個正整數n 105 即連續騎車的天數 第二行給出n個非負整數,...
1060 愛丁頓數
英國天文學家愛丁頓很喜歡騎車。據說他為了炫耀自己的騎車功力,還定義了乙個 愛丁頓數 e 即滿足有 e 天騎車超過 e 英里的最大整數 e。據說愛丁頓自己的 e 等於87。現給定某人 n 天的騎車距離,請你算出對應的愛丁頓數 e n 輸入第一行給出乙個正整數 n 10 5 即連續騎車的天數 第二行給出...
1060 愛丁頓數
題目鏈結 思路 利用hash的思想把所騎行的公里數作為下標儲存在陣列中,然後利用倒序,把後一項加給前一項 找滿足騎行公里數 天數的,但根據所給案例計算了一下,他是求滿足有 e 天騎車超過 e 英里的最大整數 e即 比如最大是六,則應為有六天騎行數 6 所以應該是每一項算他之後的所有項個數之和 不包括...