題意描述:
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,你要給出這些參賽者...