jacaleren yazdi | Birde şu sorunun algoritmasını yazabilir misinz?
Klavyeden girilecek olan bir dizi miktarın, hangi banknotlarla tam olarak ödenebileceğini belirleyen algoritma tasarlayın(Örneğin; klavyeden 1250, 1500, 1780 ve 1110 miktarları girilmiş olsn. Bu miktarları ödemek için gerekli banknotlar şöyle olmalıdır: 555x100 , 2x50 , 1x20, 2x10) |
Öncelikle neden kendin denemedin bunun algoritmasını yazmayı? Birilerine kod veya algoritma yazdırmayı istiyorsan, yeri burası değil. Rentacoder'ı falan denemelisin.
Herneyse, öncelikle bankonot ayırımlarında hata var. Hesapladığıma göre girilen değerlerin toplamı 5640 yapıyor ve bunun bankonotları da 56x100, 0x50, 2x20 ve 0x10 yapıyor.
Peki bunu nasıl bulabilirim? Çok basit. 4 işlem..
5640'ı önce 100'e böl, bölüm'ü al..
Kalanı 50'ye böl, bölümü al..
Kalanı 20'ye böl, bölümü al..
Kalanı 10'a böl, bölümü al..
Integer division yaptığın için kalan'ın bölen'den küçük olması tam da bizim istediğimiz bir durum aslında. C# ile hızlıca şu kodu yazdım senin için..
using System;
namespace ProgramConsole
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Kaç adet miktar girilecek?");
int adet = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Değerleri giriniz:");
int toplam = 0;
for ( int i = 0; i < adet; i++ )
toplam += Convert.ToInt32(Console.ReadLine());
GetBankanot(toplam);
}
public static void GetBankanot(int toplam)
{
int yuzluk = toplam / 100;
int kalan = toplam - (yuzluk * 100);
int ellilik = kalan / 50;
kalan -= ellilik * 50;
int yirmilik = kalan / 20;
kalan -= yirmilik * 20;
int onluk = kalan / 10;
Console.WriteLine();
Console.WriteLine("Bankonotlar şu şekilde;");
Console.WriteLine(string.Format("{0}x100, {1}x50, {2}x20, {3}x10",
yuzluk, ellilik, yirmilik, onluk));
}
}
}
Sonuç şu şekilde olur;
Kaç adet miktar girilecek?
4
Değerleri giriniz:
1250
1500
1780
1110
Bankonotlar şu şekilde;
56x100, 0x50, 2x20, 0x10
www.sonergonul.net
|