CCF CSP考題 2013-12 1、2題 (找到出現最多的數,ISBN號碼判斷)
阿新 • • 發佈:2018-12-22
第一題 找到出現次數最多的數
試題編號: | 201312-1 |
試題名稱: | 出現次數最多的數 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: |
問題描述 給定n個正整數,找出它們中出現次數最多的數。如果這樣的數有多個,請輸出其中最小的一個。 輸入格式 輸入的第一行只有一個正整數n(1 ≤ n ≤ 1000),表示數字的個數。 輸入的第二行有n個整數s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相鄰的數用空格分隔。 輸出格式 輸出這n個次數中出現次數最多的數。如果這樣的數有多個,輸出其中最小的一個。 樣例輸入 10 1 10 20 30 20 樣例輸出 10 |
# 201312-1
# 找到出現最多的數
n = int(input())
a = list(map(int, input().split()))
b = list(set(a)) # 化為集合,去掉相同數
b.sort() # 從小到大排序
s = dict(zip(b, map(a.count, b))) # 將數與它的出現次數組合再轉為字典
print(max(s, key=s.get)) # 根據字典值選出count最大的數
另外的解法:
# 基礎版的找到出現最多的數
n = int(input())
a = list(map(int, input().split()))
b = []
for i in range(n):
b.append(a[i])
b.sort()
t = 0
tmp = 0
for i in a:
if a.count(i) > t:
tmp = i
t = a.count(i)
elif a.count(i) == t:
if i < tmp:
tmp = i
else:
pass
else:
pass
print(tmp)
第二題 ISBN號碼判斷
試題編號: | 201312-2 |
試題名稱: | ISBN號碼 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: | 問題描述 每一本正式出版的圖書都有一個ISBN號碼與之對應,ISBN碼包括9位數字、1位識別碼和3位分隔符,其規定格式如“x-xxx-xxxxx-x”,其中符號“-”是分隔符(鍵盤上的減號),最後一位是識別碼,例如0-670-82162-4就是一個標準的ISBN碼。ISBN碼的首位數字表示書籍的出版語言,例如0代表英語;第一個分隔符“-”之後的三位數字代表出版社,例如670代表維京出版社;第二個分隔之後的五位數字代表該書在出版社的編號;最後一位為識別碼。 識別碼的計算方法如下: 首位數字乘以1加上次位數字乘以2……以此類推,用所得的結果mod 11,所得的餘數即為識別碼,如果餘數為10,則識別碼為大寫字母X。例如ISBN號碼0-670-82162-4中的識別碼4是這樣得到的:對067082162這9個數字,從左至右,分別乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然後取158 mod 11的結果4作為識別碼。 編寫程式判斷輸入的ISBN號碼中識別碼是否正確,如果正確,則僅輸出“Right”;如果錯誤,則輸出是正確的ISBN號碼。輸入格式 輸入只有一行,是一個字元序列,表示一本書的ISBN號碼(保證輸入符合ISBN號碼的格式要求)。輸出格式 輸出一行,假如輸入的ISBN號碼的識別碼正確,那麼輸出“Right”,否則,按照規定的格式,輸出正確的ISBN號碼(包括分隔符“-”)。樣例輸入0-670-82162-4樣例輸出Right樣例輸入0-670-82162-0樣例輸出0-670-82162-4 |
解題思路
很簡單,迴圈得到每個數與其對應的位置相乘的和,然後對11求餘之後,判斷ISBN號是否正確。注意:餘數是10時,要判斷最後一位是不是“X”。
程式碼如下:標記為網上的程式碼參考如上鍊接。
第一個:
# 201312-2 判斷ISBN號碼是否正確,自己寫,注意最後條件的判斷
list = input()
a = list.replace('-', '')
b = []
n = len(a)
for i in range(n-1):
b.append(int(a[i]))
sm = 0
for o in range(n-1):
t = b[o] * (o + 1)
sm += t
mod = sm % 11
if list[-1] == "X":
if mod == 10:
print("Right")
else:
isbn = list[0:12] + str(mod)
print(isbn)
else:
if mod == int(list[-1]):
print("Right")
elif mod == 10:
isbn = list[0:12] + "X"
print(isbn)
else:
isbn = list[0:12] + str(mod)
print(isbn)
第二個 :(網上)
# 判斷ISBN號碼是否正確,網上
def takenum(mlist): # 取出數字返回列表
rlist = []
for x in mlist:
if (x.isdigit()):
rlist.append(int(x))
return rlist
isbn = input()
l = takenum(isbn)
out = 0
for i in range(9):
out += l[i] * (i + 1)
code = out % 11 # 根據公式計算識別碼
if ((isbn[-1] == str(code)) or (isbn[-1] == 'X' and code == 10)):
# 識別碼正確
print("Right")
else:
if (code != 10):
isbn = isbn[:-1] + str(code)
else:
isbn = isbn[:-1] + 'X'
print(isbn)