C sharp - PROGRAMA C# URGE

   
Vista:
Imágen de perfil de angel

PROGRAMA C# URGE

Publicado por angel ivanto534@gmail.com (2 intervenciones) el 02/12/2015 00:37:00
Hola me dejaron un programa en C# en aplicación de consola donde sea básicamente una maquina que de cambio. por ejemplo que el programa tenga:

0 billetes de 1000

5 billetes de 500

10 billetes de 200

10 billetes de 100

15 billetes de 50

15 billetes de 20

20 monedas de 10

20 monedas de 5

30 monedas de 2

50 monedas de 1 peso...

Y por ejemplo yo meto un billete de mil a los billetes de mil le sumaria 1 y me daría 2 billetes de 500 y obviamente a los billetes de 500 se los restaría y quedarían 3 y si pongo otro de mil y ya no hay de 500 pues 2 de doscientos y uno de 100 y se los reste y hasta que se acaben o etc por que puede seguir sumando billetes penas llevo 15 dias en la escuela y mi profesor ya me pidió eso busque en internet pero algo especifico no puedo encontrar la verdad intente pero no me sale y es para el viernes ojala me puedan ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

PROGRAMA C# URGE

Publicado por xve (30 intervenciones) el 02/12/2015 08:43:50
Hola Angel, haber si te sirve este video:

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PROGRAMA C# URGE

Publicado por Marcelo (18 intervenciones) el 17/12/2015 15:11:25
Buen día,

Espero no sea demasiado tarde para responder.

Lo que necesitas utilizar es un algoritmo denominado Greedy.

Básicamente lo que consta este algoritmo es en elegir la mejor opción local para cada caso, con el objetivo de lograr una buena solución.

Te dejo una solución muy básica del problema para que se entienda. Espero sirva, saludos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class Dinero
        {
            public int Cantidad { get; set; }
            public int Monto { get; set; }
        }
 
        public static void Cambio(int monto)
        {
            List<Dinero> monedas = new List<Dinero>();
            Dictionary<int, int> cambio = new Dictionary<int, int>();
            Dinero mil = new Dinero() { Cantidad = 0, Monto = 1000 };
            Dinero quinientos = new Dinero() { Cantidad = 5, Monto = 500 };
            Dinero docientos = new Dinero() { Cantidad = 10, Monto = 200 };
            Dinero cien = new Dinero() { Cantidad = 10, Monto = 100 };
            Dinero cincuenta = new Dinero() { Cantidad = 15, Monto = 50 };
            Dinero veinte = new Dinero() { Cantidad = 15, Monto = 20 };
            Dinero diez = new Dinero() { Cantidad = 20, Monto = 10 };
            Dinero cinco = new Dinero() { Cantidad = 20, Monto = 5 };
            Dinero dos = new Dinero() { Cantidad = 30, Monto = 2 };
            Dinero uno = new Dinero() { Cantidad = 50, Monto = 1 };
            monedas.Add(mil);
            monedas.Add(quinientos);
            monedas.Add(docientos);
            monedas.Add(cien);
            monedas.Add(cincuenta);
            monedas.Add(veinte);
            monedas.Add(diez);
            monedas.Add(cinco);
            monedas.Add(dos);
            monedas.Add(uno);
 
            for (int i = 0; i < monedas.Count && monto > 0;)
            {
                if (monedas[i].Cantidad > 0 && monedas[i].Monto <= monto)
                {
                    if (monedas[i].Monto < monto || (monedas[i].Monto == monto && cambio.Count > 0))// Me tengo que asegurar de que por lo menos le di cambio la primera vez antes de igualar billetes
                    {
                        if (cambio.ContainsKey(monedas[i].Monto))
                            cambio[monedas[i].Monto]++;
                        else
                            cambio.Add(monedas[i].Monto, 1);
                        monedas[i].Cantidad--;
                        monto -= monedas[i].Monto;
                    }
                    else {
                        i++;//En caso que sea la primera vuelta se debe dejar pasar, dado que sino le estaria devolviendo el billete directamente
                        monedas[i].Cantidad++; //Sumo 1 al billete que me dieron
                    }
                }
                else
                    i++;
 
            }
 
            foreach (var item in cambio)
            {
                Console.WriteLine("Billetes " + item.Key + " Cantidad: " + item.Value);
            }
 
        }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar