MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 142

 
Artyom Trishkin :

Hayır :)))

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

aynı renkteki sayıların sayısı.

Alexey Kozitsyn şu anlama geliyordu: sıralı bir dizide‌. Bir dizideki maksimum özdeş değer sayısı?

 
Mislaid :
Sıralamak:

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

Sıralama:
1 , 1 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5

Çıktıda sayıların 4 çakışan değerini alıyoruz (tek bir örnekte 5 sayısı hiçbir şeyle eşleşmeyen bir değerdir)

[Silindi]  
Artyom Trishkin :
Sıralamak:

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

Sıralama:
1 , 1 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5

Çıktıda sayıların 4 çakışan değerini alıyoruz (tek bir kopyadaki 5 sayısı hiçbir şeyle eşleşmeyen bir değerdir)

O zaman şuna benzer bir ses çıkar: bir dizideki yinelenen sayıların sayısını belirleyin.
 
Alexey Kozitsyn :
O zaman şuna benzer bir ses çıkar: bir dizideki yinelenen sayıların sayısını belirleyin.
Belki. Şu anki ifadeyle ilgili değil, kararla ilgili. Oturup karar veririm...
 
Artyom Trishkin :

Ne biri ne de diğeri.

Açıkça bilinmeyen dört numara var. İlk mesajımdaki örnekte olduğu gibi tekrar eden sayıların sayısını bulmanız gerekiyor ‌.

sıra önemsizse, sayılar tamsayıysa ve aralık biliniyorsa, o zaman bir sayaç dizisi oluşturarak O(boyut) cinsinden hesaplama yapabilirsiniz.

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]);

aksi halde gerçekten - sıralayın ve oradan en uzun özdeş dizi dizisini seçin.
 
Maxim Kuznetsov :

sıra önemsizse, sayılar tamsayıysa ve aralık biliniyorsa, o zaman basitçe bir sayaç dizisi oluşturarak O(boyut) cinsinden hesaplanabilir.

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]);

aksi halde gerçekten - sıralayın ve oradan en uzun özdeş dizi dizisini seçin.
"Aksi" anlamına gelir - herhangi bir türden bir sayı dizisi. Yani bu bir şablon işlevidir. Peki, sırala ve ara.
Ancak yavaş yavaş yapıyorum.
 
Artyom Trishkin :
Belki. Şu anki ifadeyle ilgili değil, kararla ilgili. Oturup karar veririm...
Garip.
 
fxsaber :
Garip.
Seçeneğiniz her zaman 1 verir. Bunu çözmek, kendinizinkini bulmaktan daha uzun sürer. İşte tüm tuhaflıklar ;)
 
Artyom Trishkin :
Seçeneğiniz her zaman 1 verir. Bunu çözmek, kendinizinkini bulmaktan daha uzun sürer. İşte tüm tuhaflıklar ;)
olduğu gibi başlatıldı
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));
}
saban
 

Bu da şöyle:

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