第三屆藍橋杯決賽試題 資料壓縮

2021-08-20 04:22:33 字數 1688 閱讀 8770

資料壓縮

某工業監控裝置不斷發回取樣資料。每個資料是乙個整數(0到1000之間)。各個資料間用空白字元(空格,tab或回車換行)分隔。這些資料以文字形式被儲存在檔案中。

因為大多數時候,相鄰的取樣間隔資料是相同的,可以利用這個特徵做資料的壓縮儲存。其方法是:對n(n>1)個連續相同的數字只記錄n和該數字本身;對m(m>0)個連續不重複的數字,則記錄 m*-1 和這些數字本身(之所以用負數,是為了與第一種情況區分,便於解壓縮)。

例如:取樣數字:

1234

3425

2525

2511

1517

2814

2222

2213

則根據上述規則變化後:

-112234

425 -5

1115

1728143

22 -1

13下面的程式實現了這個功能。請仔細閱讀分析**,填寫空白的部分。

void pop(int s, int* buf, int c, file* fp)

else

} } void dopack(file* r, file* w)

if(c==1)

cst = buf[pos-1] == buf[pos];

if(pst && !cst)

else

if(!pst && cst || pos == buf_n-1)

else

} else

} // while

if(c>0) _____________________________; // 填空2

} void main()

if((wfp=fopen(wfile, "w")) == null)

dopack(rfp, wfp);

fclose(wfp);

fclose(rfp);

}

答案cst pop(cst,buf,c,w)

**

// 資料壓縮 

#include

using

namespace

std;

#define buf_n 1000

void pop(int s, int* buf, int c, file* fp)

else

} } void dopack(file* r, file* w)

if(c==1)

cst = buf[pos-1] == buf[pos];

if(pst && !cst)

else

if(!pst && cst || pos == buf_n-1)

else

} else

} // while

if(c>0) pop(cst,buf,c,w); // 填空2

} int main()

if((wfp=fopen(wfile, "w")) == null)

dopack(rfp, wfp);

fclose(wfp);

fclose(rfp);

return

0;}

第三屆藍橋杯複試

第四題 奇怪的比賽 某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪 每位選手需要回答10個問題 其編號為1到10 越後面越有難度。答對的,當前分數翻倍 答錯了則扣掉與題號相同的分數 選手必須回答問題,不回答按錯誤處理 每位選手都有乙個起步的分數為10分。某獲勝選手最終得分剛好是100分,如果不...

藍橋杯第三屆題目

某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪 每位選手需要回答10個問題 其編號為1到10 越後面越有難度。答對的,當前分數翻倍 答錯了則扣掉與題號相同的分數 選手必須回答問題,不回答按錯誤處理 每位選手都有乙個起步的分數為10分。某獲勝選手最終得分剛好是100分,如果不讓你看比賽過程,你能...

第三屆藍橋杯預賽

3 任何乙個自然數m的立方均可寫成m個連續奇數之和。例如 1 3 1 2 3 3 5 3 3 7 9 11 4 3 13 15 17 19 程式設計實現 輸入一自然數n,求組成n 3的n個連續奇數。4 由鍵盤輸入乙個自然數 1 n 9 要求程式在螢幕上輸出如下圖形。時 時 時 注 應保證 在圖形中只...