2012-03-29 47 views
1

我有一個數組,並且在數組中有整數。我試圖計算數組中整數重複的次數。之後,我想打印百分比。這是我迄今爲止所擁有的。計算整數等於自身的次數,然後計算百分比

for(i = 2; i < 8; i++){ 
    mmblk[i] = (num[i]/bsize); //mmblk[i] =0,0,1,9,0,1 
    if(mmblk[i] == mmblk[i]){  
     count ++; 
     p = count/num[0]; 
     percent = (p * 100); 
    } 
} 
printf("Highest possible hit rate = %d/%d = %d %\n", count, num[0], percent);//num[0]=6 

對於輸出我得到: 儘可能高的命中率= 0/6 = 0

輸出應該是這樣的: 儘可能高的命中率= 3/6 = 50%

我知道有一些方法錯誤,但我無法弄清楚它是什麼。任何幫助將不勝感激。

+0

num [i]是什麼?爲什麼迭代從2到8? mmblk數組的大小是多少? – Jeeva 2012-03-29 04:11:07

+7

'如果(mmblk [i] == mmblk [i]){'哦我的哦我的哦我的 – iehrlich 2012-03-29 04:12:43

+0

@Jeeva num [i]是另一個數組,其中包含來自文本文件的行。它從2開始到8,因爲這些是我想要從文件中使用的唯一行。 mmblk的大小爲32. – oldbutnew 2012-03-29 04:16:55

回答

0

所以,如果我理解正確,你正在尋找數組中重複值的最大數量。

func({1,2,3}) = 0 
func({1,1,3}) = 2 
func({1,1,1}) = 3 

要獲得百分比,只需將此結果除以數組長度即可。

問題是你的功能太簡單了,而不是真正的解決方案。

我在第一種方法中提出的解決方案是另一個名爲counts的數組。這與源數組的長度相同。它最終是源數組中每個數字出現的次數。

對於源數組中的每個項目,您需要統計該數字出現的次數,並將該結果存儲在計數中。然後,您可以找到counts數組的最大值,並且您有a)您正在查找的最大重複值,以及b)源數組中相應的maximum-repeated-value的索引。

對於例如{0,0,1,9,0,1}:

src counts 
    0  3  Max 
    0  3 
    1  2 
    9  1 
    0  3 
    1  2 

一種優化這一點,是當你在計算,如果遇到相同數量早些時候在陣列中,你可以停下來,因爲你已經爲這個值計算了重複次數。

有了到位,你的結果是:

src counts 
    0  3  Max 
    0  0   
    1  2 
    9  1 
    0  0 
    1  0 

另一個優化是隻開始從陣列中當前的指數計算。這與其他優化的原因相同。

結果:

src counts 
    0  3  Max 
    0  2 
    1  2 
    9  1 
    0  1 
    1  1 
+0

所以如果源數組中的數字發生變化,這仍然有效嗎? – oldbutnew 2012-03-29 05:07:34

+1

是的,爲什麼不呢?我沒有給出任何代碼,因爲我認爲你需要了解你想要做什麼,而不是僅僅插入一些代碼,並希望它能夠工作。這就是我們最終得到Windows這樣的軟件的方式。 – 2012-03-29 05:09:10

+0

哈哈。我只是在檢查。我沒有提到數字會在早些時候改變。自2003年以來我沒有編寫代碼。我有一個問題。如果我不知道這個數字是什麼,我試圖保持計數,我該如何比較呢? – oldbutnew 2012-03-29 05:18:40

0

如果你只有小整數,你可以使用一個數組中,你算整數

const int MAX_INT = 1024; 
const int FIRST = 2; 
const int LAST = 7; 

unsigned int count[MAX_INT]; 
int i; 

for (i = 0; i < MAX_INT; i++) 
    count[i] = 0; 

for (i = FIRST; i <= LAST; i++) { 
    if (numbers[i] >= MAX_INT) { 
     fprintf(stderr, "Too large number"); 
     exit 1; 
    } 
    count[numbers[i]] += 1; 
} 

for (i = 0; i < MAX_INT; i++) 
    if (count[i] > 0) 
     // print your statistics 

的出現次數的數量如果你有大的整數發生,如此之大,你不能讓你的陣列count大足夠你需要更復雜的東西,我猜;首先排序你的號碼可能是一個選擇。

0

我建議一個鏈表或其中每個數據節點存儲一個數字和多少次發生其他可變長度的容器。

在僞代碼:

VariableLengthContainer V = EMPTY容器 N =尺寸(輸入) 在輸入 如果該號碼是在容器中的每個號碼,遞增其計 否則,添加編號,以容器並將其計數設置爲1