資料壓縮
某工業監控裝置不斷發回取樣資料。每個資料是乙個整數(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 要求程式在螢幕上輸出如下圖形。時 時 時 注 應保證 在圖形中只...