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

 
Vitaly Muzichenko:

我已经很困惑了)

你有一个数组。

Array[] = {1, 2, 3, 1, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3};

该函数最终应该返回什么,为什么?每个数字的匹配数量,或一个特定的最大数量,或...我是不是写了 什么,但一定是错的,而且是错的?

我不知道该如何解释...

我们看到一个阵列。12312122113333,3,33
我们用相同的颜色标记相同的数字(如果只有一个数字,就没有重复的数字--不需要)。
1
2312 1 2 2 1 1 3 3 3 3 3 ,3,3, 3 ,3,3
数出不同颜色的数字的数量:3 - 这是结果。

 
fxsaber:
你已经检查了旧的代码。仔细检查 一下。
在这里...我有点奇怪......然后我从别的地方得到了它。
 
Artyom Trishkin:

我不知道该如何解释...

我们看到一个阵列。1231212211133,3,3,3,3,3
我们用相同的颜色标记相同的数字(如果只有一个数字,就没有双数--不需要)。
1
2312 1 2 2 1 1 3 3 3 3 ,3, 3 ,3, 3 ,3,3
数出不同颜色的数字的数量:3 - 这是结果。

也许吧)

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

int GetM(int &Mas[])
{
int MasTemp[][2]; // Временный массив
int c=0,t=0;

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>0) {
     t++;
     ArrayResize(MasTemp,t);
     MasTemp[t-1][0]= c;
     MasTemp[t-1][1]= Mas[i];
   }
   c=0;
  }
  
  int ArrRange=ArrayRange(MasTemp,0);
  if(ArrRange>0) {
    ArraySort(MasTemp);
  // Comment("Цифра: ",MasTemp[ArrRange-1][1],", Количество: ",MasTemp[ArrRange-1][0]);
    return( MasTemp[ArrRange-1][1] );
  }
  
  return(-1);
}
 
Artyom Trishkin:
有...我是个怪人...我以为它来自那里,但它来自其他地方。
笼统的
// Возвращает количество различных элементов массива, которых не меньше Repeat
template <typename T>
int Strange( const T &InArray[], const int Repeat = 2 )
{
  int Res = 0;  
  
  T Array[];
  
  const int Size = ArraySize(InArray);
  
  if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
  {    
    int Tmp = 1;
    
    for (int i = 1; i < Size; i++, Tmp++)
      if (Array[i - 1] != Array[i]) // если будут структуры, то есть более универсальная запись
      {
        if (Tmp >= Repeat)
          Res++;
        
        Tmp = 0;
      }
      
    if (Tmp >= Repeat)    
      Res++;
  }

  return(Res);
}

void OnStart()
{
  int Array[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
  
  for (int i = 1; i <= 4; i++)
    Print(Strange(Array, i));
}
 
fxsaber:
总结
///
谢谢你。所有的超级 - 我愿意花一天时间...
 
Vitaly Muzichenko:

也许吧)


谢谢你,没有阵列翻转还是比较容易的;)
 
fxsaber:
归纳如下
// если будут структуры, то есть более универсальная запись
现在这很有趣。
 
Artyom Trishkin:
这很有意思
      if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh

有了这个符号,数组不仅可以是一个数字类型,而且可以是任何简单的结构

另一件事是,ArraySort对于结构来说,当然不起作用。

 
fxsaber:
      if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh

有了这个符号,数组不仅可以是一个数字类型,而且可以是任何简单的结构

另一件事是,ArraySort对于结构来说,当然不起作用。

这就对了...但结构通常很复杂。而且他们仍然要进行分类......
 
Artyom Trishkin:
没错...但结构通常非常复杂。而且他们仍然要进行分类......

复杂的是包含对象(例如,字符串)。

MqlTick是一个简单的结构。

MqlTradeRequest- 复杂。

ArraySort可以很容易地为简单结构编写。