Soru
Bir ATM’de farklı sayıda ve 4 tipte (20$, 10$, 5$, 1$) banknotlar vardır. Programcıdansa, çekmek istenilen paranın (para) kaç farklı banknottan oluştuğunun adet adet hesaplanmasını sağlayan bir algoritma oluşturması isteniyor.
Örnek
Girdi | Çıktı |
---|---|
para: 76 | Sonuç: 3 * 20$ 1 * 10$ 1 * 5$ 1 * 1$ |
para: 128 | Sonuç: 6 * 20$ 1 * 10$ 1 * 5$ 3 * 1$ |
Çözüm - C#
using System;
using System.Collections.Generic;
using System.Text;
class Program
{
static void Main()
{
// ATM'de kalan para türleri
List<int> dolar = new List<int> {1, 5, 10, 20};
// Kalan para
decimal para = 58;
decimal yirmi = 0, on = 0, bes = 0, bir = 0;
// Kalan para ilgili indeksteki değişkenden büyükse,
while (para >= dolar[3])
{
// Parayı bölerek sayının virgülden sonrasını alma
yirmi = Math.Truncate(para / dolar[3]);
// Kalan parayı al
para = para % dolar[3];
}
while (para >= dolar[2])
{
on = Math.Truncate((para / dolar[2]));
para %= dolar[2];
}
while (para >= dolar[1])
{
bes = Math.Truncate((para / dolar[1]));
para %= dolar[1];
}
while (para >= dolar[0])
{
bir = Math.Truncate((para / dolar[0]));
para %= dolar[0];
}
// Sonuçları birleştirip yazdırmak için hazırla
StringBuilder sonuc = new StringBuilder();
sonuc.AppendLine(yirmi + " * 20 $");
sonuc.AppendLine(on + " * 10 $");
sonuc.AppendLine(bes + " * 5 $");
sonuc.AppendLine(bir + " * 1 $");
Console.WriteLine(sonuc);
Console.Read();
}
}
Çözüm - Java
public class Main {
public static void main(String[] args) {
// ATM'de kalan para türleri
Integer[] dolar = new Integer[]{1, 5, 10, 20};
// Kalan para
double para = 138;
double yirmi = 0, on = 0, bes = 0, bir = 0;
// Kalan para ilgili indeksteki değişkenden büyükse,
while (para >= dolar[3])
{
// Parayı bölerek sayının virgülden sonrasını alma
yirmi = Math.floor(para / dolar[3]);
// Kalan parayı al
para = para % dolar[3];
}
while (para >= dolar[2])
{
on = Math.floor((para / dolar[2]));
para %= dolar[2];
}
while (para >= dolar[1])
{
bes = Math.floor((para / dolar[1]));
para %= dolar[1];
}
while (para >= dolar[0])
{
bir = Math.floor((para / dolar[0]));
para %= dolar[0];
}
// Sonuçları birleştirip yazdırmak için hazırla
StringBuilder sonuc = new StringBuilder();
sonuc.append((int) yirmi).append(" * 20$\n");
sonuc.append((int) on).append(" * 10$\n");
sonuc.append((int) bes).append(" * 5$\n");
sonuc.append((int) bir).append(" * 1$\n");
System.out.println(sonuc);
}
}