1. 程式人生 > >騰訊2017年暑期實習生編程題【有趣的數字】Python

騰訊2017年暑期實習生編程題【有趣的數字】Python

空間 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