2009-06-29 76 views
0

我需要找出大於或小於1的數字出現在數組中的次數。在數組中查找高於或低於1的重複數

例如,如果我有一個數組:

{1,1,1,2,3,-18,45,1} 

這裏號碼是大於或小於一出現只是一次

又如,如果我有一個數組

{1,1,1,2,3,-18,45,1,0} 

這裏的數字大於或小於1會出現兩次,即在倒數第二位有一個1,之後有一個0

再舉一個例子

{1,1,2,3,1,-18,26,1} 

這裏號碼是大於或小於一出現兩次,一組是{2,3}這就是一次,而另一組是{-18,26}所以這就是兩次。

到目前爲止,我一直能夠循環數組,但即時通訊卡。如何做到這一點

class Program 
{ 
    static void Main(string[] args) 
    { 
     System.Console.WriteLine(isOneBalanced(new int[] { 1, 1, 1, 2, -18, 45, 1 })); 
    } 

    static int isOneBalanced(int[] a) 
    { 
     foreach(int a1 in a) 
     { 

     } 
     return 0; 
    } 
} 

如何做到這一點任何人可以幫助我嗎?

+0

你能改寫這個「如果我有一個數組{1,1,1,2,3-,-18,45,1}這裏是大於或小於數比一個只出現一次」我不知道你在講些什麼。 – 2009-06-29 18:41:42

+0

我的意思是,1之間的數字組只出現一次,即如果數組是{1,1,2,3,1,4,5,1},則{2,3}和{4, 5}出現在1之間,那麼它應該計爲兩次 – jarus 2009-06-29 18:55:16

+0

基本上,你需要計算數組中每個項不是1的序列數。這是正確的嗎?如果是這樣,艾倫的答案是正確的(至少當他刪除提到-1,正如我所指出的)。 – 2009-06-29 18:58:23

回答

1

好的......簡而言之,您希望遍歷此循環一次,找出當您處於「1之間」時,並增加計數器。

有額外的或兩個竅門,但...一個「絕招」是,你應該特別注意保持跟蹤你是否已經增加了一組特定的或沒有。如果你的系列{1,3,5,1},你不想做這樣的事情:

1: don't increment 
3: increment 
5: increment  // this is bad! 
1: don't increment 

,因爲你將有2結束了,而不是1所以,保持你是否跟蹤「VE已經用布爾遞增......把它像‘haveIncremented’,你會用這樣一行結束了:

// if (haveIncremented is false) 
    // increment my counter 
    // set haveIncremented to true 

然後,當然,你需要確保你當你開始一個新的集合時,將hasIncremented設置爲false。這會在您閱讀新的「1」時發生,並且現在準備開始新的「設置」。

我試圖在編碼和解釋和幫助之間走好一段路。希望這會幫助,而不是放棄整個農場。

祝你好運。

0

您需要兩個變量。一個是布爾值,用於跟蹤您是否處於一系列不等於1或-1的數字。另一個是整數,用於跟蹤遇到的系列總數。

0

您需要一個布爾值來確定1是否是前一個值,並且需要一個整數來計算在設置布爾值時看不到1的次數。

2
/* Create variables to be used throughout 
    the process */ 
int counter = 0; 
bool newgroup = true; 

/* For each array entry: this loop will 
    cycle through our array, accessing one 
    item at a time and refer to it as 'a1' */ 
foreach(int a1 in a) 
{ 
    /* If 'a1' (our current array entry) is 
    absolutely equal to 1, set the value 
    of our boolean variable to true */ 
    if(a1 == 1) 
    newgroup = true; 
    else 
    { 
    /* Else (meaning, a1 isn't equal to 1), 
     if our variable 'newgroup' is true 
     increment our counter variable by 1 
     and set our boolean variable to false */ 
    if(newgroup) 
    { 
     counter++;  
     newgroup = false; 
    } 
    } 
}  
return counter; 
0

這可以被看作是一個有限狀態機問題的輸入序列...跟蹤你的狀態,當你遍歷和基於陣列的當前值更新您的狀態。例如,其中一個州可能負責增加您的有界元素計數器。如果您在一張紙上繪製圖表,應該很容易弄清楚......爲狀態畫圓圈,以及根據您看到的輸入類型鏈接狀態的箭頭。

祝你好運!