Bankomat#138

Bankomat (Həll təhlili)

Ən yüksək məbləğdə əskinası götürüb, mümkündürsə, məbləği qədər tədarük edirik. Maksimal olaraq belə əskinaslardan ədəd verə bilərik. Qalan hriven qalan nominalardan veririk.

Nümunə

hriven məbləğini aşağıdakı şəkildə verə bilərik: 500 + 200 + 50 + 20.

Alqoritmin reallaşdırılması

Əlimizdə olan əskinasların nominalarını massivinə qeyd edirik.

int c[6] = { 500, 200, 100, 50, 20, 10 };

Giriş məbləği oxuyuruq.

scanf("%d", &n);

dəyişkənində verilmiş əskinasların sayını hesablayaq.

res = 0;

Əlimizdə olan altı ədəd əskinasın nominalarını nəzərdən keçiririk. Məbləği vermək üçün maksimal olaraq ədəd nominalda əskinasa istifadə edə bilərik. Nominalı istifadə etdikdən sonra qalan məbləğ bərabər olur.

for (i = 0; i < 6; i++)
{
  res += n / c[i];
  n = n % c[i];
}

Əgər bütün məbləğ verilibsə (n = 0), tapılan əskinas sayını yazırıq. Əks halda yazırıq.

if (n > 0) printf("-1\n"); else printf("%d\n", res);

Java reallaşdırılması

import java.util.*;

public class Main
{
  static int c[] = {500, 200, 100, 50, 20, 10};
  
  public static void main(String[] args)
  {
    Scanner con = new Scanner(System.in);
    int n = con.nextInt();
    
    int res = 0; 
    for(int i = 0; i < 6; i++)
    {
      res += n / c[i];
      n = n % c[i];
    }
    
    if (n > 0)
      System.out.println("-1");
    else
      System.out.println(res);
    con.close();
  }
}   

Python reallaşdırılması

Giriş məbləği oxuyuruq.

n = int(input())

dəyişkənində verilmiş əskinasların sayını hesablayaq.

res = 0

Əlimizdə olan əskinas nominalarını siyahısına qeyd edirik.

c = [500, 200, 100, 50, 20, 10]

Əlimizdə olan altı ədəd əskinas nominalarını nəzərdən keçiririk. Məbləği vermək üçün maksimal olaraq ədəd nominalda əskinasa istifadə edə bilərik. Nominalı istifadə etdikdən sonra qalan məbləğ bərabər olur.

for i in range(6):
  res += n // c[i]
  n %= c[i]

Əgər bütün məbləğ verilibsə (n = 0), tapılan əskinas sayını yazırıq. Əks halda yazırıq.

if n > 0:
  print("-1")
else:
  print(res)