PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   [求救]懂程式語言的前輩們!請教問題! (https://www.pcdvd.com.tw/showthread.php?t=821146)

artery 2008-10-20 07:30 PM

[求救]懂程式語言的前輩們!請教問題!
 
目前還在學習程式的階段.堪稱新手中的新手以下有幾個程式語言的問題想請教各位前輩們!
現在有一個表
例如
000000000000000
000010100110111
000101001101110
000111101011001
001000111101011

有這五個數值
現在如果我輸入是 000000000000011
要怎樣知道正確的答案其實是 000000000000000 這個數值呢?
請問是用if else 一個一個寫下去比對嗎? 還是有更好的辦法呢?

sibaken 2008-10-20 07:40 PM

看不懂你講什麼
000000000000011
怎麼變成
000000000000000

artery 2008-10-20 07:42 PM

引用:
作者sibaken
看不懂你講什麼
000000000000011
怎麼變成
000000000000000


抱歉沒說清楚
就是錯誤更正就對了..
因為來源碼000000000000000可能在傳輸途中因訊號減弱或者miss導致接收到的碼為000000000000011
但是必須把錯誤的000000000000011更正為000000000000000

sibaken 2008-10-20 07:44 PM


000010100110111
000101001101110
000111101011001
001000111101011
是幹啥用的

edjc 2008-10-20 07:47 PM

記得不是有用查表的寫法嗎
記得是用[switch case]下去寫的


太久沒用C忘光光了 = =

sibaken 2008-10-20 07:47 PM

這個不會是要用CRC32吧

artery 2008-10-20 07:57 PM

引用:
作者sibaken

000010100110111
000101001101110
000111101011001
001000111101011
是幹啥用的


那就是一張正確的表裡面的正確碼 共32碼
table1 = 000000000000000;
table2 = 000010100110111;
table3 = 000101001101110;
table4 = 000111101011001;
table5 = 001000111101011;
table6 = 001010011011100;
table7 = 001101110000101;
table8 = 001111010110010;
table9 = 010001111010110;
table10 = 010011011100001;
table11 = 010100110111000;
table12 = 010110010001111;
table13 = 011001000111101;
table14 = 011011100001010;
table15 = 011100001010011;
table16 = 011110101100100;
table17 = 100001010011011;
table18 = 100011110101100;
table19 = 100100011110101;
table20 = 100110111000010;
table21 = 101001101110000;
table22 = 101011001000111;
table23 = 101100100011110;
table24 = 101110000101001;
table25 = 110000101001101;
table26 = 110010001111010;
table27 = 110101100100011;
table28 = 110111000010100;
table29 = 111000010100110;
table30 = 111010110010001;
table31 = 111101011001000;
table32 = 111111111111111;

假設 我現在輸入000000000000011
然後一直跟表中數值比較比較到最後找到相似的000000000000000
就把正確數值輸出
大概就是這樣子吧~說真的 我只知道是這樣 但是不知道怎樣寫= ="
就是寫個具有錯誤更正的程式就對了~

sibaken 2008-10-20 08:34 PM

簡單講一下好了
這個應該是考你演算法
我不知道是不是最快的方式
A=000000000000011
B(0)~B(31)=table1~table32
用迴圈將A跟B(0)~b(31)相減得到C(0)~C(31)(大減小)
例如
000000000000011-000000000000000=000000000000011
000010100110111-000000000000011=000010100110100
000101001101110-000000000000011=000101001101011
...............
然後判別C當中有幾個0
最多0的就是答案

artery 2008-10-20 08:39 PM

引用:
作者sibaken
簡單講一下好了
這個應該是考你演算法
我不知道是不是最快的方式
A=000000000000011
B(0)~B(31)=table1~table32
用迴圈將A跟B(0)~b(31)相減得到C(0)~C(31)(大減小)
例如
000000000000011-000000000000000=000000000000011
000010100110111-000000000000011=000010100110100
000101001101110-000000000000011=000101001101011
...............
然後判別C當中有幾個0
最多0的就是答案


感謝前輩指導
好像就是這樣子~
我先寫寫看 非常感謝Orz"

wahahung 2008-10-20 09:00 PM

如果要快一點的話
用bitwise AND 運算, 再計算bit string中1 的次數
如果是用c++ 的話, 印象中STL 有Bitmap 的class可用,
應該很快就可以做出來


引用:
作者sibaken
簡單講一下好了
這個應該是考你演算法
我不知道是不是最快的方式
A=000000000000011
B(0)~B(31)=table1~table32
用迴圈將A跟B(0)~b(31)相減得到C(0)~C(31)(大減小)
例如
000000000000011-000000000000000=000000000000011
000010100110111-000000000000011=000010100110100
000101001101110-000000000000011=000101001101011
...............
然後判別C當中有幾個0
最多0的就是答案


所有的時間均為GMT +8。 現在的時間是02:28 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。