题目描述】
在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的max,最小的为min,则该数列的极差定义为M=max−min。
【输入】
第一行,一个数为N;
第二行,N个数。
【输出】
输出极差。
源代码:
#include <stdio.h>
#include<algorithm>
using namespace std;
int a[10000]; //定义两个数组 用于求最大最小值
int b[10000];
int cmp(int p,int q)
{
return p>q; //从大到小排序
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(a,a+n); //升序排序
for(int i=1;i<n;i++)
{
a[i]=a[i]*a[i-1]+1; //按照题目,取出最左边的两个数进行a*b+1运算并存入数组
sort(a+i,a+n); //排序新数组 注意区间 不要越界
}
int max=a[n-1];
sort(b,b+n,cmp); //求最小值
for(int i=1;i<n;i++)
{
b[i]=b[i]*b[i-1]+1;
}
int min=b[n-1];
printf("%d",max-min);
}