騰訊2017年暑期實習生編程題【有趣的數字】Python
阿新 • • 發佈:2018-05-22
空間 style 最大 ... lse utf-8 tor 問題 spl
有趣的數字
時間限制:1秒
空間限制:32768K
題目描述:
小Q今天在上廁所時想到了這個問題:有n個數,兩兩組成二元組,差最小的有多少對呢?差最大呢?
輸入描述:
輸入包含多組測試數據。 對於每組測試數據: N - 本組測試數據有n個數 a1,a2...an - 需要計算的數據 保證: 1<=N<=100000,0<=ai<=INT_MAX.
輸出描述:
對於每組數據,輸出兩個數,第一個數表示差最小的對數,第二個數表示差最大的對數。
輸入示例:
6 45 12 45 32 5 6
輸出示例:
1 2
思路:
將數據進行排序,
從頭開始遍歷得到最小的數min的個數,
從尾開始遍歷得到最大的數max的個數,
若最大的數max的個數,則從比 max 小 n 的 max2(n為max與其他數的最小差)的位置開始遍歷,得到max2的個數
差最小的對數有三種情況:
第一種:存在唯一 一個最大的數max和唯一 一個比 max 小 n 的 max2(n為max與其他數的最小差),如(1,1,8,9),這種情況差最小的對數為1
第二種:存在唯一 一個最大的數max和 m 個比 max 小 n 的 max2,如(1,8,8,9),這種情況差最小的對數為m
第三種:存在n個最大的數max,如(1,9,9,9),這種情況差最小的對數為n*(n-1)/2
差最大的對數存在三種情況:
第一種:存在唯一 一個最大的數max和唯一 一個最小的數,如(1,1,8,9),這種情況差最小的對數為1
第二種:存在唯一 一個最大的數max和n個最小的數,如(1,1,8,8,9),這種情況差最小的對數為n
第三種:存在m個最大的數max和唯一 一個最小的數,如(1,9,9,9),這種情況差最小的對數為m
第三種:存在m個最大的數max和n個最小的數,如(1,1,9,9,9),這種情況差最小的對數為m*n
Python代碼:
1 #coding=utf-8 2 #__author:Administrator 3 #__time:2018/5/22 17:54 4 #__file_name:[編程題] 有趣的數字5 6 7 date = [] 8 num = int(raw_input()) 9 str_in = raw_input() 10 date = [int(n) for n in str_in.split()] 11 date.sort() 12 Max = date[num-1] 13 Max2= date[num-2] 14 Min = date[0] 15 i = num-1 16 tmax = 0 17 tmax2= 0 18 tmin = 0 19 while i>0 : 20 if Max == date[i]: 21 tmax += 1 22 i -= 1 23 else : 24 break 25 if tmax == 1: 26 i = num-2 27 while i>0: 28 if Max2 == date[i]: 29 tmax2 += 1 30 i -= 1 31 else : 32 break 33 i = 0 34 while i<num : 35 if Min == date[i]: 36 tmin += 1 37 i += 1 38 else : 39 break 40 if tmax > 1 : 41 small = (tmax*(tmax-1))/2 42 elif tmax == 1 and tmax2 == 1: 43 small = 1 44 elif tmax == 1 and tmax2 > 1: 45 small = tmax2 46 47 if tmax == 1 and tmin == 1: 48 big = 1 49 elif tmax >1 and tmin == 1: 50 big = tmax 51 elif tmax == 1 and tmin>1: 52 big = tmin 53 else : 54 big = Max * Min 55 56 print small, big
騰訊2017年暑期實習生編程題【有趣的數字】Python