Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 142

 
Artyom Trishkin:

Nein :)))

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

ist die Anzahl der Zahlen der gleichen Farbe.

Alexey Kozitsyn meinte: in einem sortierten Array.Maximale Anzahl von identischen Werten in einer Sequenz?

 
Mislaid:
Array:

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

Sortierung:
1,1,1,1, 1,2, 2, 3,3,4,4,5

Die Ausgabe sind 4 übereinstimmende Zahlenwerte (die Zahl 5 in einer einzelnen Instanz ist kein übereinstimmender Wert)

 
Artyom Trishkin:
Array:

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

Sortieren nach:
1,1,1, 1,2, 2, 3,3,4,4,5

Die Ausgabe besteht aus 4 übereinstimmenden Zahlenwerten (die Zahl 5 in einer einzigen Kopie stimmt mit nichts überein)

Das würde dann in etwa lauten: Bestimme die Anzahl der Zahlen in der Folge, die Duplikate haben.
 
Alexey Kozitsyn:
Dann würde es etwa so klingen: Bestimme die Anzahl der Zahlen in einer Folge, die Duplikate haben.
Vielleicht. Im Moment geht es nicht um den Wortlaut, sondern um die Lösung. Ich sitze hier und löse...
 
Artyom Trishkin:

Weder noch.

Es sind vier unbekannte Nummern bekannt. Sie müssen die Anzahl der sich wiederholenden Zahlen ermitteln, wie in dem Beispiel in meinem ersten Beitrag.

Wenn die Reihenfolge unwichtig ist, die Zahlen ganze Zahlen sind und der Bereich bekannt ist, dann kann man für O(size) zählen, indem man einfach ein Array von Zählern erstellt.

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

Andernfalls müssen Sie wirklich sortieren und von dort aus die längste Folge identischer Zahlen auswählen.
 
Maxim Kuznetsov:

Wenn die Reihenfolge unwichtig ist, die Zahlen ganze Zahlen sind und der Bereich bekannt ist, dann kann man für O(size) einfach ein Array von Zählern erstellen.

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

Ansonsten - wirklich - sortieren und von dort aus die längste Folge von Gleichen auswählen.
Anders" ist also eine Reihe von Zahlen beliebigen Typs. Es handelt sich also um eine Vorlagenfunktion. Gut und sortieren und suchen.
Aber ich mache es langsam.
 
Artyom Trishkin:
Vielleicht. Im Moment geht es nicht um den Wortlaut, sondern um die Lösung. Ich sitze hier und löse...
Es ist seltsam.
 
fxsaber:
Das ist merkwürdig.
Ihre Option gibt immer 1 aus. Es dauert länger, das herauszufinden, als es sich selbst auszudenken. Das war's mit den Merkwürdigkeiten ;)
 
Artyom Trishkin:
Ihre Option gibt immer 1 aus. Es dauert länger, das herauszufinden, als es sich selbst auszudenken. Das war's mit den Merkwürdigkeiten ;)
Es läuft, wie es läuft.
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));
}
Es funktioniert.
 

Dies scheint auch so zu sein:

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