Ci credi che e' proprio il nodo centrale del mio ultimo colloquio di assunzione?
Io l'avevo risolto piu' o meno come riporto qui.
Si puo' ottimizzare pesantemente, ma cosi' funziona (sono stato assunto).
Ovviamente poi sono stato assunto per un problema simile, e la prima ottimizzazione e' stata proprio quella di "compattare" e quindi sveltire le operazioni.
Codice:
class Program
{
static void Main(string[] args)
{
Agente ag = new Agente();
Console.WriteLine("Compro 10 azioni a 70.0");
ag.Compro(10, 70.0);
Console.WriteLine("Compro 8 azioni a 75.0");
ag.Compro(8, 75.0);
Console.WriteLine("Vendo 15 azioni a 78.0");
double gain = ag.Vendo(15, 78.0);
Console.WriteLine("Gain ultima operazione={0}", gain);
Console.ReadKey();
}
}
class Agente
{
private Stack<double> Azioni = new Stack<double>();
public void Compro(int Numeroazioni, double Prezzo)
{
for (int t = 0; t < Numeroazioni; t++)
{
Azioni.Push(Prezzo);
}
}
public double Vendo(int NumeroAzioni, double Prezzo)
{
double ret = 0;
for (int t = 0; t < NumeroAzioni; t++)
{
double conf = Azioni.Pop();
ret += (Prezzo - conf);
}
return ret;
}
}
Stampa 80, che dovrebbe essere giusto