Błędne zadanie C#

0

Mam problem z zadaniem, który chcę napisać C#:
Na wejściu bierze jakaś kwotę w złotówkach np. 679 czyli, na wyjściu zwraca minimalna ilość banknotów i bilonu, która pozwoli na wypłacenie tej kwoty czyli dla przykładu: 500+100+50+20+5+2+2 czyli wypluwa 7 oraz 500 - 1,100 - 1, 50 - 1, 20 - 1, 5 - 1, 2 - 2. Wymyśliłem coś takiego, ale jak zwykle cos namieszałem i zastanawiam się na lepszym rozwiązaniem.

					
public class Program
{
	public static void Main()
	{
		int x = Convert.ToInt32(Console.ReadLine());
		int[] currency = new int[]{500,200,100,50,10};
		int[] tab = new int[10];
		
		for(int i = 1; x >= currency[i]; x - currency[i] )
		{
			tab[i]++;			
		}
		for (int i = 0; i < tab.Length; i++)
        {
                Console.Write(tab[i] + " ");
        }
		int same = 0;
		for(int i = 0; i < tab[i] - 1; i++)
		{
    		if(tab[i] == tab[i + 1])
        		same++;
				Console.Write(tab[i] + " - " ,same );
		}
           
		
	}
}
1

Nie masz się co zastanawiać nad lepszym, bo obecnie nie masz żadnego. To co wkleiłeś się nawet nie kompiluje.
Zrób coś w stylu:

for (i=0; i < ilosc banknotow i bilonu; i++) {
   while (x >= currency[i]) {
      x = x - currency[i];
      tab[i]++;
   }
}
1
using System;
using System.Collections.Generic;
using System.Linq;
					
public class Program
{
	public static void Main()
	{
		int[] currency = new int[]{500,200,100,50,20,10,5,2,1};
		int price = 679;
		
		var lst = new List<int>();
		foreach(var c in currency) 
		{
			while(price - c >= 0) 
			{
				price -= c;
				lst.Add(c);
			}
		}
		
		Console.WriteLine(((lst.Count > 0) ? string.Join(",", lst) : price.ToString()));
		foreach(var l in lst.Distinct()) 
		{
			Console.Write(l + " - " + lst.Count(e => e == l) + ", ");
		}
	}
}
0

Jeżeli zadanie byłoby w bardziej rzeczywistych warunkach (skończona ilość monet), to dynamic programming.

https://www.geeksforgeeks.org/coin-change-dp-7/

0

Mam kolejny raz déjà vu.
Nie tak dwno ktos się pytał o to samo .
Te forum ma wyszukiwarkę i ogromne archiwum . Wiele rzeczy już dawno tutaj zostało odkrytych ale zawsze można coś lepiej napisać .

1 użytkowników online, w tym zalogowanych: 0, gości: 1