有趣的数字
时间限制: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
原文地址:https://www.cnblogs.com/mygzhh/p/9073998.html
时间: 2024-10-26 04:50:12