2017-06-05 98 views
0

我有一个数组,其输入由用户通过使用键盘给出。所有输入都存储在名为storeKeys的数组中。该阵列的索引是由可变storeKeysIndex保持被初始化为0,并且当一个键被按下,按下的键的值被存储在storeKeys阵列和递增的storeKeysIndex的值。让storeKeys有价值观在液晶显示屏上打印前三个重复元素

storeKeys = {3,2,5,7,1,1,9,9,9,1,3,1}; 

我想在液晶显示阵列中的前三名重复的元素。在上面的数组中,lcd应该显示1,9,3,因为'1'在上面的数组中重复四次,'9'重复三次,'3'重复两次。其他值不应该由LCD显示。

我试图计算每个元素的频率并将频率存储在数组中freq。我可以显示串行监视器中每个元素的频率。但我没有得到如何显示在液晶显示器(或在串行监视器)前三个重复的数字。代码如下:

for(int i=0; i<12; i++) 
{ 
    freq[i] = -1; 
} 
for(int i=0; i<12; i++) 
{ 
    count = 1; 
    for(int j=i+1; j<12; j++) 
    { 
     if(storeKeys[i] == storeKeys[j]) 
     { 
      count++; 
      freq[j] = 0; 
     } 
    } 

    if(freq[i]!=0) 
    { 
     freq[i] = count; 
    } 
} 
for(int i=0; i<12; i++) 
{ 
    if(freq[i]!=0 && storeKeys[i] != NULL) 
    { 
     Serial.println(storeKeys[i]); 
     Serial.println(freq[i]); 
     Serial.println("=========="); 
    } 
} 

上面的代码工作,但显示所有元素的频率。我只想显示前三个重复元素。

这里是链接模拟器在线:

https://circuits.io/circuits/5073094-the-unnamed-circuit/edit

感谢。

+0

[WT ........](https://stackoverflow.com/questions/44363166/something-is-wrong-with-my-deletion) – LPs

+0

什么意思是“前三个重复元素” ?最重复的,最高的数字值,最高的指数?对于超过3个重复数字的情况,这需要清楚。在你的例子中,它们按遇到的顺序显示。 –

回答

1

答案是here

排序的频率阵列下面的函数,然后只需要有序阵列的最后三个要素。

void sort(int a[], int size) 
{ 
    for(int i=0; i<(size-1); i++) 
    { 
    for(int o=0; o<(size-(i+1)); o++) 
     { 
      if(a[o] > a[o+1]) 
      { 
       int t = a[o]; 
       a[o] = a[o+1]; 
       a[o+1] = t; 
      } 
     } 
    } 

    } 
+0

感谢您的回复。频率数组只包含** storeKeys **数组值的频率。查看链接并在链接中运行代码。 –

0

我得到了答案!感谢您的帮助

for (int i = 0; i < 10; i++) // Loop to sort the storeKeys array according to freq array 
{ 
    if(freq[i]!=0 && storeKeys[i] != NULL){ 
    for (int j = i + 1; j < 10; j++) 
    { 
     if (freq[i] < freq[j]) 
     { 
      a = freq[i]; 
      freq[i] = freq[j]; 
      freq[j] = a; 
      b = storeKeys[i]; 
      storeKeys[i] = storeKeys[j]; 
      storeKeys[j] = b; 
     } 
    } 
    } 
} 
for(int i=0;i<10;i++) { 
    if(storeKeys[i] != NULL && freq[i] != 0){ 
    // Serial.println(storeKeys[i]); 
    while(c<3){ 
     mostPressed[c] = storeKeys[i]; 
     c=c+1; 
     break; 
    } 
    } 
    if(c==3){ 
    break; 
    } 
} 

在这里,我根据频率阵列和存储前三个结果在一个新的数组排序storeKeys阵列。我自己得到了。谢谢您的帮助!