题目描述:
有趣的数字__牛客网有趣的数字 ,腾讯2017暑期实习生编程题 https://www.nowcoder.com/questionTerminal/af709ab9ca57430886632022e543d4c6
小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢?
输入描述:
输入包含多组测试数据 。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2...an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.
输出描述:对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数 。
示例1
输入645 12 45 32 5 6输出1 2
这一题乍以看很懵圈 。
我是暴力解的,有点乱哈,先梳理一下思路 。
【【C++】有趣的数字】特殊情况:代码如下:
数组内是否有相同的数字:
如果有:
那么最小值一定是0,我们要找出差值0的个数,即为最小值,也就是说要找出数组内有多少个相同的数字,假设最小值是1,在数组内仅有3个,那么差值为0的个数为:
num = (3-1)*3/2 = 3 对;
所以我们要找出数组内所有数字相同的组,并找出来这一组有多少个,利用公式 (n-1)*n/2,依次累加 。即为最小值的对数 。
最大值就是最小值的个数*最大值的个数,通过一次遍历即可求得 。
如果没有相同的
那么最大值的对数只有一对,就是最大值减去最小值 。但最小值的对数,我们要通过做遍历的手段来获得,获得之后还要再遍历一次,才能获得对数 。
如果数组内的数据都相同
比如 1 1 1 1 1,那么最大值和最小值的对数都是一样的,即为最小值的对数 。
//有趣的数字#include #include #include using namespace std;int st[1000000];int main(){ int n;while(cin>>n){int maxnum = 0;int minnum = 2147483647;//可以用INT_MAXfor(int i=0;i>st[i];if(st[i]>maxnum){maxnum= st[i]; //在输入数据的时候就找出来最大值和最小值}if(st[i]
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
