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