1.问题的描述
在黑板上一共有1-10 共10 个数,,进行如下操作:每次擦去其中的两个数a和b,然后在数列中加入一个数a*b+1,如此下去直至黑板上只有一个数,在所按的操作方式得到的数当中,最大的为max,最小的为min,则该数列的极差定义为M=max-min;对于给定的数列: arr[] = { 1,6,5,9,8,4,3,7,2,10 };编程计算极差M。
2.问题的分析
假设有5个数,分别为:1,4,3,2,5,如果首先先对这五个数进行从小到大的排序,即为:1,2,3,4,5,;合并前两个数是得到的数列是:3,3,4,5;一次类推,最后得到的是一个值,为211,如果对这5个数进行从大到小的排序,即为:5,4,3,2,1;然后进行如上相同的操作,最后得到的值为:130;所以可见当是从小到大的排序时,所求得的为最大值,反之则是最小值,而且最大值与最小值的求解过程都是类似的,以此类推也可得到求N个数的极差。
3.思路
用一个数组arr[10]保存1-10这十个数,然后分别进行从小到大和从大到小的排序,接着根据分析中的操作分别求出最大值和最小值,最后即可求出1-10 的极差。
源代码如下:
#include "stdafx.h"
#include<algorithm>
#include<iostream>
using namespace std;
//从小到大