新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 142

 
Artyom Trishkin:

没有:)))

1,1,1,2,3,3,2,1,4,4,5

是相同颜色的数字的数量。

Alexey Kozitsyn 的意思是:在一个排序的数组中。一个序列中相同值的最大数量?

 
Mislaid:
阵列。

1,1,1,2,3,3,2,1,4,4,5

分拣。
1,1,1,1, 1,2, 2, 3,3,4,4,5

输出是4个匹配的数字值(数字5在一个实例中不是一个匹配值)。

 
Artyom Trishkin:
阵列。

1,1,1,2,3,3,2,1,4,4,5

排序方式。
1,1,1, 1,2, 2, 3,3,4,4,5

输出是4个匹配的数字值(单一副本中的数字5没有匹配任何东西)。

这样一来,大致是:确定序列中存在重复的数字的数量。
 
Alexey Kozitsyn:
那么它听起来就像:确定一个序列中具有重复的数字的数量。
也许。目前,这不是关于措辞的问题,而是关于解决方案的问题。我坐在这里,解决...
 
Artyom Trishkin:

也没有。

有四个已知的未知号码。你需要找到 重复数字的数量,就像我第一篇文章 中的例子一样。

如果顺序不重要,数字是整数,范围是已知的,那么你可以通过创建一个计数器数组来进行O(size)的计数。

ArrayResize(counter,100);

ArrayInitialize(counter,0);

for(int i=ArraySize(source)-1;i>=0;i--) {

   counter[source[i]]‌++;

}

int pos=ArrayMaximum(counter);‌

‌PrintFormat("Чаще всего встречалось число %d, аж %d раз",pos,source[pos]);

否则,真的要进行排序,并从那里选择最长的相同数字序列。
 
Maxim Kuznetsov:

如果顺序不重要,数字是整数,范围是已知的,那么你可以简单地通过创建一个计数器数组来进行O(size)计算。

ArrayResize(counter,100);

ArrayInitialize(counter,0);

for(int i=ArraySize(source)-1;i>=0;i--) {

   counter[source[i]]‌++;

}

int pos=ArrayMaximum(counter);‌

‌PrintFormat("Чаще всего встречалось число %d, аж %d раз",pos,source[pos]);

否则,真的--排序,并从那里选择最长的相同序列。
所以 "否则 "是一个任何类型的数字数组。所以它是一个模板函数。好了,分类和搜索。
然而,我正在慢慢地做这件事。
 
Artyom Trishkin:
也许。目前,这不是关于措辞的问题,而是关于解决方案的问题。我坐在这里,解决...
这很奇怪。
 
fxsaber:
很奇怪。
你的选项总是给出1。琢磨的时间比自己想出来的时间要长。这就是所有的奇怪之处;)
 
Artyom Trishkin:
你的选项总是给出1。琢磨的时间比自己想出来的时间要长。这就是所有的奇怪之处;)
按原样运行。
template <typename T>
int Strange( const T &InArray[] )
{
  int Res = 1;  
  
  T Array[];
  
  const int Size = ArraySize(InArray);
  
  if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
  {    
    int Tmp = 1;
    
    ArrayPrint(Array);
    
    for (int i = 1; i < Size; i++)
    {
      if (Array[i - 1] != Array[i])
      {
        if (Tmp > Res)
          Res = Tmp;
        
        Tmp = 0;
      }
        
      Tmp++;
    }
  }

  return(Res);
}

void OnStart()
{
  int Array[] = {1, 2, 3, 1, 2, 1, 2, 2};
  
  Print(Strange(Array));
}
它是有效的。
 

这个人似乎也是。

void OnTick()
{
int Arr[]={1, 2, 4, 4, 2, 1, 2, 2, 1, 4, 1, 4, 3, 3, 3, 4, 3, 3, 1, 3, 4, 3, 3};
Comment( GetM(Arr) );
}

int GetM(int &Mas[])
{
int c=0,cd=0,res=-1;

ArraySort(Mas);
int ArrSize= ArraySize(Mas);
  for(int i=0; i<ArrSize; i++) {
   for(int x=i; x<ArrSize; x++) {
    if(Mas[i]==Mas[ArrayMinimum(Mas,WHOLE_ARRAY,x)]) c++;
   }
    
   if(c>=cd) { // ищем первое большее ">" или максимально большее ">=" при одинаковом количестве
     cd=c; // количество совпадений
     res=Mas[i]; // число
   }
   c=0;
  }
  return( res /*cd*/); // число|количество
}
原因: