CCF-CSP 最小差值與跳一跳
201712-1 最小差值
問題描述
試題編號:201712-1 試題名稱:最小差值 時間限制:1.0s 記憶體限制:256.0MB 問題描述 給定n個數,請找出其中相差(差的絕對值)最小的兩個數,輸出它們的差值的絕對值。 輸入格式 輸入第一行包含一個整數n。 第二行包含n個正整數,相鄰整數之間使用一個空格分隔。 輸出格式 輸出一個整數,表示答案。 樣例輸入 5 1 5 4 8 20 樣例輸出 1 樣例說明 相差最小的兩個數是5和4,它們之間的差值是1。 樣例輸入 5 9 3 6 1 3 樣例輸出 0 樣例說明 有兩個相同的數3,它們之間的差值是0. 資料規模和約定 對於所有評測用例,2 ≤ n ≤ 1000,每個給定的整數都是不超過10000的正整數。
題解1
這個題目與前面題目(201609-1 最大波動)的思路類似,只要遍歷輸入的整數列表,得到元素與其後面元素的元素差值的絕對值,不斷地比較絕對值,得到較小的差值,最後的較小差值就是最小的差值。
n = int(input())# 整數個數 lst = list(map(int, input().split()))# 整數列表 res = abs(lst[1] - lst[0])# 初始化,也可初始化為題目給定的整數最大值 for i in range(n - 1):# 從第1個數掃描到倒數第2個數 for j in range(i + 1, n):# 計算每個數與其後所有數的差值的絕對值 tmp = abs(lst[i] - lst[j])# 取差值的絕對值 if tmp < res:# 得到較小的差值 res = tmp print(res)# 輸出最小差值
題解2
也可以先對整數列表進行排序,然後遍歷列表中的元素,這樣只需得到每個元素後的 1 個元素與其的差值,然後與較小的差值記錄進行比較即可。
n = int(input())# 整數個數 lst = list(map(int, input().split()))# 整數列表 lst.sort()# 排序 res = lst[1] - lst[0]# 初始化 for i in range(1, n - 1):# 遍歷1到n-1號元素 if res > lst[i + 1] - lst[i]:# 取較小的差值 res = lst[i + 1] - lst[i] print(res)# 輸出最小差值
201803-1 跳一跳
問題描述
試題編號:201803-1 試題名稱:跳一跳 時間限制:1.0s 記憶體限制:256.0MB 問題描述 近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。 簡化後的跳一跳規則如下:玩家每次從當前方塊跳到下一個方塊,如果沒有跳到下一個方塊上則遊戲結束。 如果跳到了方塊上,但沒有跳到方塊的中心則獲得1分;跳到方塊中心時,若上一次的得分為1分或這是本局遊戲的第一次跳躍則此次得分為2分,否則此次得分比上一次得分多兩分(即連續跳到方塊中心時,總得分將+2,+4,+6,+8...)。 現在給出一個人跳一跳的全過程,請你求出他本局遊戲的得分(按照題目描述的規則)。 輸入格式 輸入包含多個數字,用空格分隔,每個數字都是1,2,0之一,1表示此次跳躍跳到了方塊上但是沒有跳到中心,2表示此次跳躍跳到了方塊上並且跳到了方塊中心,0表示此次跳躍沒有跳到方塊上(此時遊戲結束)。 輸出格式 輸出一個整數,為本局遊戲的得分(在本題的規則下)。 樣例輸入 1 1 2 2 2 1 1 2 2 0 樣例輸出 22 資料規模和約定 對於所有評測用例,輸入的數字不超過30個,保證0正好出現一次且為最後一個數字。
題解
這個題目有點意思,不過,也很簡單。只要按照題目給的說明,分情況討論就可以很快的解決問題。記錄為 0 時,直接輸出分數;記錄 1 為時記 1 分,分數加 1;記錄為 2 時,如果前 1 個記錄是 1 ,記 2 分,flag
標誌設定為 1 ;記錄為 2 時,如果前 1 個記錄也是 2 ,記2*flag
分,分數加上加2*flag
。遍歷記錄列表進行計分,最後即可得到最終的分數。
lst = list(map(int, input().split())) score = lst[0] flag = 1# 標誌記錄連續幾次為2 for i in range(1, len(lst)): if lst[i] == 0:# 記錄為0的情況 print(score) elif lst[i] == 1:# 記錄為1的情況 score += 1 elif lst[i] == 2 and lst[i - 1] == 1:# 這一次記錄是2,上一次記錄1的情況 flag = 1 score += 2 elif lst[i] == 2 and lst[i - 1] == 2:# 這一次與上一次都是2的情況 flag += 1 score += 2 * flag