va rog frumos ajutatima!!

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
Darkness2013
Junior
Junior
Posts: 3
Joined: 14 Apr 2014, 12:55

va rog frumos ajutatima!!

Post by Darkness2013 » 14 Apr 2014, 12:59

Am de făcut o problema ,dar nustiu cum sa o fac .Va rog frumos ajutatima.


Un șomer, pentru a supraviețui s-a gândit să facă business cu propriul său păr. Punctele de recepţie cumpără păr de orice lungime cu C u.c. pentru fiecare centimetru. Deoarece piaţa de păr este foarte dinamică, preţul unui centimetru de păr se schimbă în fiecare zi, ca şi cursul valutar. Fiind un bun business analist, şomerul a calculat care va fi preţul unui centimetru de păr în fiecare din următoarele N zile ( pentru comoditate, enumerăm zilele în ordine cronologică de la 0 la N-1 ). Acum şomerul vrea să determine, în care din aceste zile el trebuie să-şi vândă părul, că în aceste N zile să obţină un venit maximal. Se ştie că părul la el creşte numai noaptea şi creşte cu 1 centimetru. Se mai ştie că la început el era chel şi la sfârşitul zilei 0 ave un păr de lungimea 1 centimetru.
Date de intrare
În prima linie a fişierului de intrare INPUT.TXT e scris numărul întreg N (0 < N ≤ 100). În a doua linie sunt scrise N numere naturale separate prin spaţii, care nu depăşesc 100 şi corespund preţurilor C a unui centimetru de păr în fiecare zi i.
Date de ieşire
În unica linie a fişierului de ieşire OUTPUT.TXT scrieţi suma maximal de bani pe care o poate câştiga şomerul în N zile.



User avatar
MarianMMX
Junior
Junior
Posts: 16
Joined: 27 Mar 2014, 09:50
Judet: Galaţi

Re: va rog frumos ajutatima!!

Post by MarianMMX » 17 Apr 2014, 12:37

Code: Select all

#include <fstream>
#include <sstream>
#include <string>
#include <iterator>

int main()
{
std::ifstream fIn;
std::ofstream fOut;
std::string N;
std::string linia2;
int iNumarZile = o;
int iPretMaxim = 0;
fIn.open("INPUT.TXT");
std::getline(fIn, N);
istringstream ( N ) >> iNumarZile;
std::getline(fIn, linia2);
std::istream_iterator<std::string> st(linia2), sf;
std::vector<std::string> preturi(st, sf);
for(int i=1; i <= iNumarZile; i++)
{
int z;
istringstream ( preturi[i-1] ) >> z;
if((z * i) > iPretMaxim) iPretMaxim = z * i;
}
fIn.close();
fOut.open("OUTPUT.TXT");
fOut << iPretMaxim << "\n";
fOut.close();
return 0;
}

If you think C++ is not overly complicated, just what is a
protected abstract virtual base pure virtual private destructor
and when was the last time you needed one? — Tom Cargill (1990)

User avatar
Sylvie Woo
Junior
Junior
Posts: 12
Joined: 18 Nov 2011, 13:02

Re: va rog frumos ajutatima!!

Post by Sylvie Woo » 17 Apr 2014, 12:50

@MarianMMX solutia ta pare gresita. Tu faci o singura vanzare si ramai cu par in cap la sfarsit, ceea ce nu va duce la venitul maxim!

Corect e asa (dar nu cel mai eficient, desigur):
1. se cauta ziua cu cel mai bun pret (pretul maxim)
2. se vinde tot parul disponibil pe moment
3. daca mai sunt zile, se reia pasul 1 considerand acea zi ca ziua zero
(4. Se cumpara bere de toti banii obtinuti :biggrin: )

Daca era vorba sa fie 1000000 de zile, sau posibil si mai multe, era mai interesanta problema!

User avatar
MarianMMX
Junior
Junior
Posts: 16
Joined: 27 Mar 2014, 09:50
Judet: Galaţi

Re: va rog frumos ajutatima!!

Post by MarianMMX » 19 Apr 2014, 14:11

Am modificat conform recomandarilor:

Code: Select all

#include <fstream>
#include <sstream>
#include <string>
#include <iterator>

int main()
{
std::ifstream fIn;
std::ofstream fOut;
std::string N;
std::string linia2;
int iNumarZile = 0;
int iPretMaxim = 0;
fIn.open("INPUT.TXT");
std::getline(fIn, N);
istringstream ( N ) >> iNumarZile;
std::getline(fIn, linia2);
std::istream_iterator<std::string> st(linia2), sf;
std::vector<std::string> preturi(st, sf);
while(preturi.size() > 0)
{
int iZ = 0;
int iP = 0;
for(int i=1; i <= preturi.size(); i++)
{
int z;
istringstream ( preturi[i-1] ) >> z;
if((z * i) > iP)
{
iP = z * i;
iZ = i;
}
}
iPretMaxim += iP;
preturi.erase(preturi.begin(), preturi.begin()+i-1);
}
fIn.close();
fOut.open("OUTPUT.TXT");
fOut << iPretMaxim << "\n";
fOut.close();
return 0;
}

If you think C++ is not overly complicated, just what is a
protected abstract virtual base pure virtual private destructor
and when was the last time you needed one? — Tom Cargill (1990)

Post Reply