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 , 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(크기)로 계산할 수 있습니다.

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(크기)로 계산할 수 있습니다.

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*/ ); // число|количество
}