2012-04-25 50 views
1

這個問題可能看起來有些模糊,但我會嘗試按照外行的說法分解它。計算數組中後續組的數量

比方說,我有24個Byte值的數組,只含有01

011000100000001000000111 

陣列邏輯上分爲每組四個值的羣體,這給了我們:

0110 0010 0000 0010 0000 0111 

現在,我想數一下,有多少個後續組有至少一個值設爲1。在我提供的示例中,我們有2後續組。

我應該怎樣去編程?

+1

對不起,我必須抵制這一點,它更像是一個邏輯問題而不是任何事情...... – ComputerSaysNo 2012-04-25 16:23:55

+3

你說你會試圖用'外行人'來解釋,這有點'挑釁',尤其是因爲你以前問題描述不正確(至少不是明確的)。 – 2012-04-25 16:46:59

+0

@AndreasRejbrand - 它可能是一個語言問題。 – 2012-04-27 17:09:22

回答

5

大廈阿爾諾的回答,其中有正確的想法,但實際上並沒有做什麼,OP問:

function CountNonNullGroupSequenceLength(Values: PByte; ValuesCount: integer): integer; 
var Groups: PIntegerArray; 
    i, counter: integer; 
begin 
    Groups := Values; 
    result := 0; 
    counter := 0; 
    for i := 0 to (ValuesCount shr 2)-1 do 
    if Groups[i]<>NULLGROUP then 
     inc(counter) 
    else begin 
     result := max(result, counter); 
     counter := 0; 
    end; 
    result := max(result, counter); 
end; 

確保將Math放入您的使用列表,所以你可以得到Max函數。

+0

完美!非常感謝你。我不得不稍微修改它,因爲它不想在Delphi XE2下編譯,但是,這是一段很好的代碼。 – Pateman 2012-04-25 17:59:59

+0

@Pateman:很高興我能幫上忙。 – 2012-04-25 18:02:12

+0

我想出了自己的解決方案,但在看到你的解決方案後,我確信我的代碼不會從硬盤恢復。 :) 再次感謝。 – Pateman 2012-04-25 18:06:50

2

由於一個組是4個字節,這就如同將4個字節的類型轉換爲一個整數。

例如:

const 
    NULLGROUP = 0; 

function CountNonNullGroups(const Values: TByteArray): integer; 
var Groups: TIntegerArray absolute Values; 
    i: integer; 
begin 
    result := 0; 
    for i := 0 to (length(Values) shr 2)-1 do 
    if Groups[i]<>NULLGROUP then 
     inc(result); 
end; 

或用指針:

function CountNonNullGroups(Values: PByte; ValuesCount: integer): integer; 
var Groups: PIntegerArray; 
    i: integer; 
begin 
    Groups := Values; 
    result := 0; 
    for i := 0 to (ValuesCount shr 2)-1 do 
    if Groups[i]<>NULLGROUP then 
     inc(result); 
end; 
+2

我認爲你誤解了這個問題。但是由於OP所做的非理想描述,這很容易完成。您只需計算非零組的數量。 OP想要找到後續非零組的「鏈」的最大長度。 – 2012-04-25 16:45:59

+0

是的,我沒有實施「後續」模式。我的錯。 ;) – 2012-04-25 18:04:38