1060 愛丁頓數

2021-09-23 13:16:52 字數 3025 閱讀 3696

題意描述:

英國天文學家愛丁頓很喜歡騎車。據說他為了炫耀自己的騎車功力,還定義了乙個「愛丁頓數」 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 所以應該是每一項算他之後的所有項個數之和 不包括...