MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 142 1...135136137138139140141142143144145146147148149...1953 新しいコメント Mislaid 2017.03.07 05:38 #1411 Artyom Trishkin:いいえ :)))1,1,1,2,3,3,2,1,4,4,5は同じ色の数字の数です。Alexey Kozitsynの 意味:ソートされた配列の中で連続して同じ値を持つ最大数? Artyom Trishkin 2017.03.07 05:42 #1412 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つの数字のマッチング値です(1つのインスタンスの数字5はマッチング値ではありません)。 削除済み 2017.03.07 05:51 #1413 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つの数字のマッチング値です(1コピーの5という数字は何もマッチングしていません) そうすると、「数列の中で重複している数字の数を決める」という大まかな内容になります。 Artyom Trishkin 2017.03.07 06:01 #1414 Alexey Kozitsyn: そうすると、「数列の中で重複している数字の数を求めよ」というような意味になります。 そうかもしれませんね。今のところ文言の問題ではなく、解決策を考えています。私はここに座って、解決しています... Maxim Kuznetsov 2017.03.07 06:30 #1415 Artyom Trishkin:どちらでもない。既知の未知数は4つある。最初の投稿に ある例のように、繰り返される数字の数を求める 必要があります。もし順番が重要でなく、数字が整数で、範囲が分かっていれば、カウンターの配列を作るだけで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 2017.03.07 06:50 #1416 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]); そうでなければ、本当に-ソートして、そこから同じものが一番長く続いているものを選んでください。 つまり、"otherwise "は任意の型の数値の配列である。つまり、テンプレート機能ですね。まあとソートして検索。ただし、ゆっくりやっています。 fxsaber 2017.03.07 07:00 #1417 Artyom Trishkin: そうかもしれませんね。今のところ文言の問題ではなく、解決策を考えています。私はここに座って、解決しています... 変な感じです。 Artyom Trishkin 2017.03.07 07:13 #1418 fxsaber: それは変ですね。 あなたのオプションは常に1が出ます。自分で考えるより時間がかかる。以上、変な話でした ;) fxsaber 2017.03.07 07:35 #1419 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));} 効くんです。 Vitaly Muzichenko 2017.03.07 07:38 #1420 こちらもそうみたいですね。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*/); // число|количество } Any questions from newcomers Sort multiple arrays Single array calculation during 1...135136137138139140141142143144145146147148149...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
いいえ :)))
1,1,1,2,3,3,2,1,4,4,5
は同じ色の数字の数です。
Alexey Kozitsynの 意味:ソートされた配列の中で連続して同じ値を持つ最大数?
1,1,1,2,3,3,2,1,4,4,5
ソートする。
1,1,1,1, 1,2, 2, 3,3,4,4,5
出力は4つの数字のマッチング値です(1つのインスタンスの数字5はマッチング値ではありません)。
アレイです。
1,1,1,2,3,3,2,1,4,4,5
並び順はこちら
1,1,1, 1,2, 2, 3,3,4,4,5.
出力は4つの数字のマッチング値です(1コピーの5という数字は何もマッチングしていません)
そうすると、「数列の中で重複している数字の数を求めよ」というような意味になります。
どちらでもない。
既知の未知数は4つある。最初の投稿に ある例のように、繰り返される数字の数を求める 必要があります。
もし順番が重要でなく、数字が整数で、範囲が分かっていれば、カウンターの配列を作るだけで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]);
もし順番が重要でなく、数値が整数で、範囲が分かっていれば、カウンタの配列を作るだけで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]);
そうかもしれませんね。今のところ文言の問題ではなく、解決策を考えています。私はここに座って、解決しています...
それは変ですね。
あなたのオプションは常に1が出ます。自分で考えるより時間がかかる。以上、変な話でした ;)
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));
}
こちらもそうみたいですね。
{
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*/); // число|количество
}