數列極差問題(c語言實現)

2021-09-25 06:06:10 字數 1175 閱讀 6083

4.1題目

演算法實現題4-13 數列極差問題

★問題描述:在黑板上寫了n個正數組成的乙個數列,進行如下操作:每一次擦去其中2個數,設為a和b,然後在數列中加入乙個數ab+1,如此下去直至黑板上只剩下乙個數。在所有按這種操作方式最後得到的數中,最大的數記為max,最小的數記為min,則該數列的極差m定義為m=max-min。

★演算法設計:對於給定的數列,計算出其極差m。

資料輸入:由檔案input.txt給出輸入的數列,第一行是數列的長度n(不超過2000),第二行起是數列中的n個數,相鄰2個數由空格分隔。檔名由鍵盤輸入。

結果輸出:將計算的數列極差m寫入檔案output.txt。結果應分兩行輸出,第一行是數m的位數,第二行是數m。

輸入檔案示例 輸出檔案示例

input.txt output.txt

3 11 1 1 0

4.2分析

應用貪婪演算法,由小到大運算為最大,由大到小運算為最小,兩者相減得極差,再迴圈除10得其位數。

4.3源**

#include #includevoid sort(int* p, int size);//順序氣泡排序

int main()

z = 0;

for (i = n-1; i >= 0; i--)

m = x[z - 1] - y[z - 1];

printf("極差%d\n", m);

if (m == 0)

i = 1;

else

for (i = 0; m > 0; i++)

m /= 10;

printf("輸出為%d位數", i);

fprintf(fpw, "%d\n", i);

fprintf(fpw, "%d\n", m);

fclose(fpr);

fclose(fpw);

return 0;

}void sort(int* p, int size)//順序氣泡排序

}

4.4執行結果

4.5總結

在一次次演算法思路求解的過程中對c語言的理解不斷加深,雖然距離競賽水平還差得遠,但是畢竟也在一點點進步。

數列極差問題

在黑板上寫了n個正整數排成的乙個數列,進行如下操作 每次擦去其中的兩個數a和b,然後在數列中加入乙個數a b 1,如此下去直至黑板上剩下乙個數,在所有按這種操作方式最後得到的數中,最大的記為max,最小的記作min,則該數列的極差定義位m max min。問題分析 下面通過例項來認識題目中描述的計算...

JZOJ 數列極差問題

jzoj題目友鏈 在黑板上寫了n nn個正整數組成的乙個數列,進行如下操作 每次擦去其中的兩個數a aa和b bb,然後在數列中加入乙個數a b 1 a b 1 a b 1,如此下去直至黑板上 剩下乙個數,在所有按這種操作方式最後得到的數中,最大的為max maxma x,最小的為min minmi...

貪心 數列極差問題

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