Hoj, mám problém. Potřebuji pomoci s řešením.
Mám číselnou posloupnost v poli (5, 1, 2, 4, 3, 8, 11, 4)
a potřebuji najít zvolený počet maxim (největších prvků) ale bez toho abych použil například třídící algoritmus quicksort a setřídil je všechny a pak vzal třeba 4 největší prvky. Osobně bych to řešil asi quicksortem ale zadání je zadání.
Fórum › C / C++
Hledání libovolných pocet maxim
To Bald3rr : ono by stacilo brat v uvahu vsechny cisla mensi nez naposledy vlozene maximum.... nemusel by pak kontrolovat i ty dalsi maxima ... proste by jen ty prvky ktery by byly nad tim nejmensim nalezenym maximem a vcetne nej nesrovnaval(vynechal by je)
vlastne by mu stacilo pokazdy to maximum vypsat a pamatovat si jen to posledni ...
Ano na tomto principu mám celý kód založen. Pomocí cyklu procházim pole cisla[5] a porovnávám takto
for(i=0; i<5;i++)
{
if(cisla[i] > cisla[i+1])
zapisi do druheho pole jeho index
else
asi musim projet od zacatku pole s indexi a porovnat je s porovnavanym cislem - NEVIM
}
problem je ale to ze i kdyz cislo neni vetsi jak to druhe , neznamena to ze jiz v kontrolovaných cislech takové cislo vetsi neni. Tady prve nevim co s tim.
neni problem porovnat cislo s nasledujicim a vetsi zapsat do druheho pole (index) ale co dal kdyz hledame treba 4 maxima? nemohu zaposovat jen ty nasledujici vetsi ale musim brat v uvahu i ty mensi protoze mohou patrit do intrevalu pole s indexy (vysledky)
To cheeester : Akorát mi to nefunguje v případě, že v poli jsou stejná čísla. Ale na to snad již přijdeš :)
#include <iostream>
using std::cout; using std::cin;
int main()
{
// Deklarace
int pocet_maxim; // Počet maxim, které chce uživatel najít
int maximum, minimum; // Pomocné proměnné
int * max; // Pole, do kterého se budou ukládat maxima
int cisla[] = {5, 1, 2, 4, 3, 8, 11, 4}; // Pole, z kterého se hledá
cout << "Pocet maxim: ";
cin >> pocet_maxim;
max = new int[pocet_maxim]; // Aokace pole
// Najde největší číslo a zároveň minimum
maximum = cisla[0]; // Největší číslo z pole
minimum = cisla[0]; // Nejmenší číslo z pole
for(int i = 0; i < 8; i++) { // 8 = počet prvků v poli
if(cisla[i] > maximum) // Tohle je snad jasné :)
maximum = cisla[i];
if(cisla[i] < minimum)
minimum = cisla[i];
}
// Uloží do pole
max[0] = maximum;
// Najde největší číslo, ale menší než předchozí
for(int i = 1; i < pocet_maxim; i++) {
maximum = minimum; // Jako největší možné číslo bere ze zezačátku to nejmenší, aby kdyby bylo větší, mohla se hodnota přepsat
// Jinak by mohlo dojít k tomu, pokud by bylo za maximum zvolené příliš velké číslo, opakovalo by se
int n = 0;
for(; n < 8; n++) {
if(cisla[n] > maximum && cisla[n] < max[i-1]) // Pokud bude číslo větší než maximum a zároveň menší než poslední uložené maximum
maximum = cisla[n];
}
max[i] = maximum; // Uloží největší z maximum z doposud nevypsaných maxim
}
// Výpis na obrazovku
for(int i = 0; i < pocet_maxim; i++)
cout << max[i] << " ";
cin.get();
cin.get();
delete(max); // Uvolnění paměti
return 0;
}
ty jo. No jsi trosku na jinem levelu nez ja :smile2:
moc nevim jakou roli tam hraje
using std::cout; using std::cin;
cin.get();
cin.get();
jiank je to tedy paradni a klobouk dolu. S tim minimem by me to asi nenapadlo. Jdu to poredne prostudovat at to pochopim. Urcite jsi mi ale moc pomohl a moc ti dekuji
zajímavé zadání, vyřešil jsem to v Pythonu, postup snad pochopíš a předěláš si na C
data = [5, 1, 2, 4, 3, 8, 11, 4]
pocetMaxim=3
maxima=[]
for i in data:
if len(maxima) < pocetMaxim:
maxima.append(i)
continue
for maximum in maxima:
if i > maximum and i not in maxima:
if len(maxima)== pocetMaxim:
maxima.remove(min(maxima))
maxima.append(i)
break
print maxima
To cheeester : using std::cout a using std::cin je to samé jako using namespace std, akorát, že zpřístupní pouze cout a cin, krásně je to vysvětlené tady http://programujte.com/index.php?akce=clanek&cl=2005041402-c++-1-lekce.
To cin.get(); na konci je tam proto, aby se program neukončil hned po provedení příkazů. Je to něco jako getchar() v C.
Kdyby jsi měl ohledně mého kódu jakkékoliv dotazy, rád zodpovím :).
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Padnul MAXIM :( už v roce 2021 — založil JerryM
Nabízím překlady webů, návodů, článků a dalších libovolných textů — založil mrchicken
Počet polí a počet prvkov v poli — založil Bimak
Pocet delitelu — založil Neox
Počet řádků — založil artorie
Moderátoři diskuze