我有一个数组,其输入由用户使用键盘输入。所有输入都存储在名为storeKeys的数组中。数组的索引由变量storeKeysIndex保留,该变量初始化为0,并且在按下某个键时,按下的键的值存储在storeKeys数组中,并且storeKeysIndex的值递增。让storeKeys具有值

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


我希望LCD显示数组中前三个重复的元素。在上面的数组中,lcd应该显示1,9,3,因为在上面的数组中值“ 1”重复了四次,“ 9”重复了三次,“ 3”重复了两次。其他值不应由lcd显示。

我试图计算每个元素的频率并将频率存储在数组频率中。我可以在串行监视器中显示每个元素的频率。但是我不知道如何在LCD(或串行监视器)上显示前三个重复的数字。这是代码:

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

谢谢。

最佳答案

答案来自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;
            }
        }
    }

  }

10-07 20:00
查看更多