這個問題可能看起來有些模糊,但我會嘗試按照外行的說法分解它。計算數組中後續組的數量
比方說,我有24個Byte
值的數組,只含有0
或1
:
011000100000001000000111
陣列邏輯上分爲每組四個值的羣體,這給了我們:
0110 0010 0000 0010 0000 0111
現在,我想數一下,有多少個後續組有至少一個值設爲1
。在我提供的示例中,我們有2
後續組。
我應該怎樣去編程?
這個問題可能看起來有些模糊,但我會嘗試按照外行的說法分解它。計算數組中後續組的數量
比方說,我有24個Byte
值的數組,只含有0
或1
:
011000100000001000000111
陣列邏輯上分爲每組四個值的羣體,這給了我們:
0110 0010 0000 0010 0000 0111
現在,我想數一下,有多少個後續組有至少一個值設爲1
。在我提供的示例中,我們有2
後續組。
我應該怎樣去編程?
大廈阿爾諾的回答,其中有正確的想法,但實際上並沒有做什麼,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
函數。
由於一個組是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;
我認爲你誤解了這個問題。但是由於OP所做的非理想描述,這很容易完成。您只需計算非零組的數量。 OP想要找到後續非零組的「鏈」的最大長度。 – 2012-04-25 16:45:59
是的,我沒有實施「後續」模式。我的錯。 ;) – 2012-04-25 18:04:38
對不起,我必須抵制這一點,它更像是一個邏輯問題而不是任何事情...... – ComputerSaysNo 2012-04-25 16:23:55
你說你會試圖用'外行人'來解釋,這有點'挑釁',尤其是因爲你以前問題描述不正確(至少不是明確的)。 – 2012-04-25 16:46:59
@AndreasRejbrand - 它可能是一個語言問題。 – 2012-04-27 17:09:22