在黑板上寫了n個正整數排成的乙個數列,進行如下操作:每次擦去其中的兩個數a和b,然後在數列中加入乙個數a*b+1,如此下去直至黑板上剩下乙個數,在所有按這種操作方式最後得到的數中,最大的記為max,最小的記作min,則該數列的極差定義位m=max-min。
問題分析:下面通過例項來認識題目中描述的計算過程。對3個具體的資料3,5,7,討論,可能有一下3種結果:
(3*5+1)*7+1 = 113,(3*7+1)*5+1=111,(5*7+1)*3+1=109
由此可見,先運算小資料得到的是最大值,先運算大資料得到的是最小值。
c++源**如下所示:
#include
#include
#include
using
namespace
std;
//計算最大值
int calculatemax(vector
&v)
vector
::iterator ita,itb;
//每次找出v中最小的兩個數*ita、*itb,然後合併成(*ita)*(*itb)+1
while (v.size() > 2)
for (vector
::iterator it = itb+1;it != v.end();++it)
else
if (*it < *itb)
}*ita = (*ita)*(*itb)+1;
v.erase(itb);
}return v[0]*v[1]+1;
}//計算最小值
int calculatemin(vector
&v)
vector
::iterator ita,itb;
//每次找出v中最大的兩個數v[i]、v[j],然後合併成v[i]*v[j]+1
while (v.size() > 2)
for (vector
::iterator it = itb+1;it != v.end();++it)
else
if (*it > *itb)
}//用(*ita)*(*itb)+1代替*ita,然後將itb刪除
*ita = (*ita)*(*itb)+1;
v.erase(itb);
}return v[0]*v[1]+1;
}int main()
// 3 5 4 7
JZOJ 數列極差問題
jzoj題目友鏈 在黑板上寫了n nn個正整數組成的乙個數列,進行如下操作 每次擦去其中的兩個數a aa和b bb,然後在數列中加入乙個數a b 1 a b 1 a b 1,如此下去直至黑板上 剩下乙個數,在所有按這種操作方式最後得到的數中,最大的為max maxma x,最小的為min minmi...
貪心 數列極差問題
題目描述 我就說你在忽悠我吧,我剛才問了昆士蘭大學的好多魔法師,他們根本就沒有乙個人想過做什麼時間旅行的實驗,但搞笑的是,他們居然對你的理論很感興趣,想找個時間和你做進一步的討論。哎,我還以為他們和我一樣聰明呢,想不到這麼容易上當受騙。小墨老師擺出一幅你騙不了我的表情。唉,你太自以為是了,這樣吧,你...
問題 A 貪心 數列極差問題
題目描述 我就說你在忽悠我吧,我剛才問了昆士蘭大學的好多魔法師,他們根本就沒有乙個人想過做什麼時間旅行的實驗,但搞笑的是,他們居然對你的理論很感興趣,想找個時間和你做進一步的討論。哎,我還以為他們和我一樣聰明呢,想不到這麼容易上當受騙。小墨老師擺出一幅你騙不了我的表情。唉,你太自以為是了,這樣吧,你...