c - 在 LCD 显示屏上打印前三个重复元素

标签 c arrays arduino-uno arduino-ide lcd

我有一个数组,其输入是由用户使用键盘给出的。所有输入都存储在名为 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

谢谢。

最佳答案

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

  }

关于c - 在 LCD 显示屏上打印前三个重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44365468/

相关文章:

python - 如何将来自arduino串行的值存储在列表(python)中?

c++ - 递增if语句arduino

c++ - 为什么 strtoul 不能按预期工作?

c - 如何使函数仅打印 "^@"并带有 |猫-e

php $GLOBALS 显示未定义 "_SERVER"

php - 如何通过 AJAX 以正确的格式将一组复选框值发送到 PHP?

java - for循环跳过问题

c - 不支持的 16 位应用程序

c++ - 如何从网络摄像头压缩 mjpeg native 格式帧

Arduino无法同时在LED屏和串口监视器上输出