1059 C語言競賽 20 分

2021-09-23 20:52:03 字數 3522 閱讀 7920

題意描述:

c 語言競賽是浙江大學計算機學院主持的乙個歡樂的競賽。既然競賽主旨是為了好玩,頒獎規則也就制定得很滑稽:

給定比賽的最終排名以及一系列參賽者的 id,你要給出這些參賽者應該獲得的獎品。

輸入格式:

輸入第一行給出乙個正整數 n(≤10^​4),是參賽者人數。隨後 n 行給出最終排名,每行按排名順序給出一位參賽者的 id(4 位數字組成)。接下來給出乙個正整數 k 以及 k 個需要查詢的 id。

輸出格式:

對每個要查詢的 id,在一行中輸出 id: 獎品,其中獎品或者是 mystery award(神秘大獎)、或者是 minion(小黃人)、或者是 chocolate(巧克力)。如果所查 id 根本不在排名裡,列印 are you kidding?(耍我呢?)。如果該 id 已經查過了(即獎品已經領過了),列印 id: checked(不能多吃多占)。

輸入樣例:

6

1111

6666

8888

1234

5555

0001

68888

0001

1111

2222

8888

2222

輸出樣例:

8888: minion

0001: chocolate

1111: mystery award

2222: are you kidding?

8888: checked

2222: are you kidding?

解題思路:**:

import math

defmain()

: n =

int(

input()

)# 接收輸入的整數

data =

# 儲存n位同學的排名情況

for x in

range

(n):

# 排名從第一名開始。使用字典建立從參賽id到排名的對映。

data[

input()

]= x +

1 k =

int(

input()

)# 接收輸入的正整數k, k 表示需要查詢的id個數

for x in

range

(k):

id =

input()

# 讀入待查詢的id

if id not

in data:

# 這個id 不在最終排名的名單裡

award =

"are you kidding?"

else

:if data[id]

=="checked"

:# 該id對應的獎品已經被領走了,因為data[id] == 'checked'

award =

"checked"

else

:# 該id對應的獎品還未被領取

if data[id]==1

:# 如果是第一名

award =

"mystery award"

elif is_prime(data[id]):

# 如果不是第一名而是素數排名的

award =

"minion"

else

:# 既不是第一名,也不是素數排名的

award =

"chocolate"

data[id]

="checked"

# 該id對應的獎品已經被領走了,我們打上標記。

print

("{}: {}"

.format

(id, award)

)# 輸出這個id和它對應的獎品。

"""def main():

# 這段程式用於開發過程中測試素數判斷函式是否正確實現

while true:

print(is_prime(int(input())))

pass

"""def

is_prime

(x):

# 判斷x是否是素數,注意兩個if的順序不可調整。

if x ==

2or x ==

3or x ==

5or x ==7:

# 如果乙個數是 2,3,5,7, 是乙個素數

return

true

if x %2==

0or x <=1:

# 如果乙個數是偶數或者小於等於1,不是素數。

return

false

bound =

int(math.sqrt(x)

)# 按照素數定義判斷x是否是素數

for y in

range(3

, bound +1,

2):if x % y ==0:

return

false

return

true

if __name__ ==

'__main__'

: main(

)

#include

#include

#define nn 10000 + 10

// 巨集定義,便於定義最小長度夠用的定長陣列

int records[nn]

;// 在主函式之外定義的整數陣列,初始值會被強制置零。

bool is_prime

(int x)

if(x %2==

0|| x <=1)

int bound =

sqrt

(x)+1;

for(

int i=

3; i<=bound; i+=2

)}return true;

}int

main()

scanf

("%d"

,&k)

;// 讀入正整數k

for(

int i=

0; i

++i)

else

if(records[id]

>0)

elseif(

is_prime

(records[id]))

else

records[id]=-

1;// 將已經查詢過的id的排名調整為-1

}else

}return0;

}

易錯點:總結:-

1059 C語言競賽(20分)

c語言競賽是浙江大學計算機學院主持的乙個歡樂的競賽。既然競賽主旨是為了好玩,頒獎規則也就制定得很滑稽 冠軍將贏得乙份 神秘大獎 比如很巨大的一本學生研究 集 排名為素數的學生將贏得最好的獎品 小黃人玩偶!其他人將得到巧克力。給定比賽的最終排名以及一系列參賽者的id,你要給出這些參賽者應該獲得的獎品。...

1059 C語言競賽 (20 分)

1059 c語言競賽 20 分 c 語言競賽是浙江大學計算機學院主持的乙個歡樂的競賽。既然競賽主旨是為了好玩,頒獎規則也就制定得很滑稽 給定比賽的最終排名以及一系列參賽者的 id,你要給出這些參賽者應該獲得的獎品。輸入第一行給出乙個正整數 n 10 4 是參賽者人數。隨後 n 行給出最終排名,每行按...

1059 C語言競賽 20 分

c 語言競賽是浙江大學計算機學院主持的乙個歡樂的競賽。既然競賽主旨是為了好玩,頒獎規則也就制定得很滑稽 0 冠軍將贏得乙份 神秘大獎 比如很巨大的一本學生研究 集 1 排名為素數的學生將贏得最好的獎品 小黃人玩偶!2 其他人將得到巧克力。給定比賽的最終排名以及一系列參賽者的 id,你要給出這些參賽者...