数列极差
数列极差 题目描述 佳佳的老师在黑板上写了一个由n个正整数组成的数列,要求佳佳进行如下操作:每次擦去其中的 两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数为止,在所有按这 种操作方式最后得到的数中,最大的为max,最小的为 min, 则该数列的极差定义为M=max−min。 由于佳佳忙于准备期末考试,现请你帮助他,对于给定的数列,计算出相应的极差M。 输入 第一行为一个正整数n表示正整数序列的长度; 在接下来的n行中,每行输入一个正整数。 接下来的一行有一个0,表示数据结束。 输出 输出只有一行,为相应的极差d。 样例输入 3 1 2 3 0 样例输出 2 题解: 首先这个题如果拿出几个测试案例来看的话,容易推导出这是一道贪心题,就拿本题的测试案例 来看,1 2 3 这三个数有三种不同的操作顺序 1:(1*2+1)*3+1=10 2:(1*3+1)*2+1=9 3:(2*3+1)*1+1=8 从中我们容易发现这样的顺序,如果要求最大值的话,那么每次先用最小的连个数相乘的结果+1,相 反,如果要求最小值的话,每次先用最大的两个数相乘的结果+1.这样我们就可以写算法啦 提示 对于全部数据,0≤n≤50000,保证所有数据计算均在32位有符号整数范围内。 源代码: #include<bits/stdc++.h> using namespace std;