1. 程式人生 > >CCF CSP考題 2013-12 1、2題 (找到出現最多的數,ISBN號碼判斷)

CCF CSP考題 2013-12 1、2題 (找到出現最多的數,ISBN號碼判斷)

第一題 找到出現次數最多的數

試題編號: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

## 解題思路 1、將輸入的數存放到陣列,可以先排序,然後找到出現次數最多的數,如果有兩個數出現的次數一樣,則輸出index小的數。 2、使用字典統計每個數出現的次數,然後排序輸出出現次數最多的數。 程式碼如下: 簡短的那個程式碼是網上找的
# 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)