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