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

时间:2017-06-05 09:11:25

标签: 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显示数组中前三个重复的元素。在上面的数组中,lcd应显示1,9,3,因为值' 1'在上面的数组中重复四次,' 9'重复三次,' 3'重复两次。 lcd不应显示其他值。

我尝试计算每个元素的频率并将频率存储在数组 freq 中。我可以在串行监视器中显示每个元素的频率。但是我没有得到如何在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

感谢。

2 个答案:

答案 0 :(得分:1)

答案来自here

使用以下函数对频率数组进行排序,然后仅获取已排序数组的最后三个元素。

func calcNewVal(startVal: Float, changerStartVal: Float) -> Float {

    let remainingStartVals = globalTotal - changerStartVal

    let remainingNewVals = globalTotal - changer.value

    let endVal = ((startVal * (100 / remainingStartVals)) / 100) * remainingNewVals

    return endVal

}

答案 1 :(得分: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 数组进行了排序,并将前三个结果存储在一个新数组中。我自己拿到了。谢谢你的帮助!