數列極差問題

2021-07-11 07:36:44 字數 1230 閱讀 1050

在黑板上寫了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 貪心 數列極差問題

題目描述 我就說你在忽悠我吧,我剛才問了昆士蘭大學的好多魔法師,他們根本就沒有乙個人想過做什麼時間旅行的實驗,但搞笑的是,他們居然對你的理論很感興趣,想找個時間和你做進一步的討論。哎,我還以為他們和我一樣聰明呢,想不到這麼容易上當受騙。小墨老師擺出一幅你騙不了我的表情。唉,你太自以為是了,這樣吧,你...