题目内容:
在黑板上写了N个正整数组成的一个数列,进行如下操作:每次擦去其中的两个数a和b, 然后在数列中加入一个数a*b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式 最后得到的数中,最大的为max,最小的为min,则该数列的极差定义为M=max-min.请你编程, 对于给定的数列,计算极差.
输入描述
输入包含多个测试集.每个测试集的第一行N表示正整数序列长度(0<=N<=50000),随后第二行是N个正整数.当N为0时结束.
输出描述
每个结果一行.
输入样例
3 3 5 7
输出样例
4
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
const int N=50000;//32位编译器
bool cmp(const int i,const int j){
return i>j;//降序
}
int main(){
int n,i;
int a[100],b[100];
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
b[i]=a[i];
}
int tn=n;
while(tn>1){
sort(a,a+n);
a[1]=a[0]*a[1]+1;
a[0]=N;
tn--;
}
int max=a[1];
tn=n;
while(tn>1){
sort(b,b+n,cmp);
b[1]=b[0]*b[1]+1;
b[0]=0;
tn--;
}
int min=b[1];
cout<<abs(max-min);
return 0;
}