C sharp - PROGRAMA C# URGE

 
Vista:
Imágen de perfil de angel

PROGRAMA C# URGE

Publicado por angel (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
Val: 31
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

PROGRAMA C# URGE

Publicado por xve (37 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
sin imagen de perfil
Val: 39
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

PROGRAMA C# URGE

Publicado por Marcelo (23 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

PROGRAMA C# URGE

Publicado por ElRey (1 intervención) el 22/06/2020 04:36:59
Hola Marcelo ami también me dejaron este programa, y aun no comprendo muy bien el como hacerlo, quisiera saber si podrías explicarme mas a detalle tu código que compartiste, ya que intente hacerlo pero no logre hacer que funcionara, te agradecería mucho si pudieras echarme una mano.
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