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

有趣的数字

时间限制: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 instr_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 =017 tmax2=018 tmin =019 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 =034 while i

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 =tmax246

47 if tmax == 1 and tmin == 1:48 big = 1

49 elif tmax >1 and tmin == 1:50 big =tmax51 elif tmax == 1 and tmin>1:52 big =tmin53 else:54 big = Max *Min55

56 print small, big

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值