码迷,mamicode.com
首页 > 编程语言 > 详细

腾讯2017年暑期实习生编程题【有趣的数字】Python

时间:2018-05-22 22:27:28      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:odi   else   个数   int   最大的   输入   编程   dmi   问题:   

有趣的数字

时间限制: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

标签:odi   else   个数   int   最大的   输入   编程   dmi   问题:   

原文地址:https://www.cnblogs.com/mygzhh/p/9073998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!