Pereiti prie turinio

Rekomenduojami pranešimai

Darže vienoje ilgoje lysvėje vienodu atstumu viena nuo kitos buvo pasėtos saulėgrąžos. Jos užaugo didelės ir gražios. Atėjus garbingam svečiui, daržininkas nutarė padovanoti jam dvi saulėgrąžų galvas. Tačiau svečias gali rinktis tik tokias dvi galvas, kurių bendra masė didžiausia ir kurios auga greta.

 

Sveiki, gal kas nors zinote kaip padaryti, kad rastu saulegrazas kurios yra viena salia kitos?

Redagavo ITTT
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdėk kodo fragmentą, kiek pasirašęs. O šiaip sprendimas manau galėtų būti labai elementarus: tiesiog suki ciklą per masyvą ir ieškai poros su didžiausia suma. Iš pradžių sumą prisilygini 0 ir 1 elemento sumai, tada tikrini, ar 1 ir 2 elemento suma nėra didesnė, tada 2 ir 3, 3 ir 4 ir t.t. iki galo.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdėk kodo fragmentą, kiek pasirašęs. O šiaip sprendimas manau galėtų būti labai elementarus: tiesiog suki ciklą per masyvą ir ieškai poros su didžiausia suma. Iš pradžių sumą prisilygini 0 ir 1 elemento sumai, tada tikrini, ar 1 ir 2 elemento suma nėra didesnė, tada 2 ir 3, 3 ir 4 ir t.t. iki galo.

 

Bet jei tarkim duomenyse butu daugiau skaiciu?

 

Duomenys:

20 2.5   1      3.1   5      1 4.1   2.2   11     0      0 1     1      5.8   9.4   11 8     2      0     0      0.8

 

As galvojau, kad surasiu didziausias 2 reiksmes, siuo atveju man suranda 11 ir 11(nors rezultate turi buti 11 ir 9.4, kadangi tai yra skaiciai kurie yra greta ir kuriu suma yra didziausia). Tada galvojau, kad parasysiu if(bet nesugalvoju kaip padaryti), kad surastu tuos du skaicius.

 

Mano failas:

 

#include <iostream>
#include <fstream>
const char CDfv[] = "duom.txt";
const char CRfv[] = "rez.txt";
const char CMax = 50;
///----------------------------------------------
void Skaitymas (int & n, double S[]);
void DidMaz (double S[], int n, double & did, double & did1);
void Spausdinimas (int n, double S[], int g1, int g2, double mase, double did, double did1);
///----------------------------------------------
using namespace std;
int main () {
   int n;
   double did, did1;
   double S[CMax];
   int g1 = 0;
   int g2 = 0;
   double mase = 0;
   Skaitymas(n, S);
   DidMaz(S, n, did, did1);
   Spausdinimas(n, S, g1, g2, mase, did, did1);
   return 0;
}
///----------------------------------------------
void Skaitymas (int & n, double S[]){
   ifstream fd(CDfv);
   fd >> n;
   for (int i = 0; i < n; i++)
       fd >> S[i];
   fd.close();
}
void Spausdinimas (int n, double S[], int g1, int g2, double mase, double did, double did1){
   ofstream fr(CRfv);
   //for (int i = 0; i < n; i++)
       //fr << S[i] << endl;
       fr << did << endl;
       fr << did1 << endl;
   fr.close();

}
void DidMaz (double S[], int n, double & did, double & did1){
   for (int i = 0; i < n; i++){
       if (S[i] > did1)
           did1 = S[i];
       if (S[i] > did){
           did1 = did;
           did = S[i];
       }
   }
}

Redagavo ITTT
Nuoroda į pranešimą
Dalintis kituose puslapiuose

void DidMaz (double S[], int n, double & did1, double & did2) {
   double maxSuma = S[0] + S[1];
   double index1 = 0, index2 = 1;

   for (int i = 1; i < n - 1; i++){
       if (S[i] + S[i + 1] > maxSuma){
           maxSuma = S[i] + S[i + 1];
           index1 = i;
           index2 = i + 1;
       }
   }

   did1 = S[index1];
   did2 = S[index2];
}

 

Netestavau, net nežiūrėjau, ar kompiliuojasi, bet manau turėtų. Pažiūrėk, ar grąžina gerą rezultatą.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

void DidMaz (double S[], int n, double & did1, double & did2) {
   double maxSuma = S[0] + S[1];
   double index1 = 0, index2 = 1;

   for (int i = 1; i < n - 1; i++){
       if (S[i] + S[i + 1] > maxSuma){
           maxSuma = S[i] + S[i + 1];
           index1 = i;
           index2 = i + 1;
       }
   }

   did1 = S[index1];
   did2 = S[index2];
}

 

Netestavau, net nežiūrėjau, ar kompiliuojasi, bet manau turėtų. Pažiūrėk, ar grąžina gerą rezultatą.

 

 

Aciu, veikia. Gal galetum truputi paaiskinti ka sis kodas daro?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aciu, veikia. Gal galetum truputi paaiskinti ka sis kodas daro?

 

Jis daro tai, ką aš bandžiau paaiškinti savo pirmame poste.

Pradžioje tariame, kad didžiausia poros suma yra masyvo pradžioje, t.y. 0 ir 1 elemento. Išsisaugome jų indeksus. Tada einame per likusius masyvo elemento, jei einamojo nario ir sekančio nario suma didesnė už išsaugotą max reikšmę - atnaujiname max reikšmę į einamojo nario ir sekančio nario sumą bei išsaugome jų indeksus. Galiausiai (prasukus visą ciklą), grąžiname masyvo elementus su rastais max sumos indeksais.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nagi? :)

 

void DidMaz (double S[], int n, double & did1, double & did2) { // funkcija DidMaz gauna duoble ir int tipo parametrus

double maxSuma = S[0] + S[1]; // local kintamųjų ir jų

double index1 = 0, index2 = 1; // reikšmių priskirimas

 

for (int i = 1; i < n - 1; i++){ // ciklas veiks tol kol parametras int n susilygins su int i reikšme

if (S[i] + S[i + 1] > maxSuma){ //tikrinama ar masyvo paeiliui einanti dpuble kintamųjų suma, didesnė uz anksčiau didžiausią ejusių elm. reikšmę.

maxSuma = S[i] + S[i + 1]; //priskiriam elemt suma

index1 = i;

index2 = i + 1; // didziausiu masyvo elementu [indexu] priskirimas

}

}

 

did1 = S[index1]; //didziausiu paeiliui einanciu duoble reiksmiu sumos kitnamieji

did2 = S[index2];

}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...