Професионална програма
Loading...
yovkovbpfps avatar yovkovbpfps 8 Точки

import java.util.Scanner;

public class Coins {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        double money = Double.parseDouble(scanner.nextLine());
        int coin = 0;
        money = Math.round(money * 100);

        while (money > 0) {

            if (money >= 200){
                coin++;
                money = money -200;
            } else if (money >= 100) {
                coin++;
                money = money -100;
            }  else if (money >= 50) {
                coin++;
                money = money -50;
            } else if (money >= 20) {
                coin++;
                money = money -20;
            }  else if (money >= 10) {
                coin++;
                money = money -10;
            } else if (money >= 5) {
                coin++;
                money = money -5;
            } else if (money >= 2) {
                coin++;
                money = money -2;
            } else if (money >= 1) {
                coin++;
                money = money -1;
            }
        }
        System.out.println(coin);
    }
}

едно решение на JAVA

0
dido1092 avatar dido1092 38 Точки

Аз съм го решил по подобен начин, но ми дава само 80 точки, не разбирам къде ми е грешката, ако може някой да помогне!

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _05.Coins
{
    class Program
    {
        static void Main(string[] args)
        {
            double sum = double.Parse(Console.ReadLine());
            int coins = 0;

            while (sum > 0)
            {
                sum = Math.Round(sum, 2);
                if (sum >= 1000)
                {
                    sum -= 1000;
                    coins++;
                }
                else if (sum >= 500)
                {
                    sum -= 500;
                    coins++;
                }
                else if (sum >= 200)
                {
                    sum -= 200;
                    coins++;
                }
                else if (sum >= 100)
                {
                    sum -= 100;
                    coins++;
                }
                else if (sum >= 50)
                {
                    sum -= 50;
                    coins++;
                }
                else if (sum >= 20)
                {
                    sum -= 20;
                    coins++;
                }
                else if (sum >= 10)
                {
                    sum -= 10;
                    coins++;
                }
                else if (sum >= 5)
                {
                    sum -= 5;
                    coins++;
                }
                else if (sum >= 2)
                {
                    sum -= 2;
                    coins++;
                }
                else if (sum >= 1)
                {
                    sum -= 1;
                    coins++;
                }
                else if (sum >= 0.50)
                {
                    sum -= 0.5;
                    coins++;
                }
                else if (sum >= 0.20)
                {
                    sum -= 0.2;
                    coins++;
                }
                else if (sum >= 0.10)
                {
                    sum -= 0.1;
                    coins++;
                }
                else if (sum >= 0.05)
                {
                    sum -= 0.05;
                    coins++;
                }
                else if (sum >= 0.02)
                {
                    sum -= 0.02;
                    coins++;
                }
                else if (sum>= 0.01)
                {
                    sum -= 0.01;
                    coins++;
                }
            }
            Console.WriteLine(coins);
        }
    }
}
 

0
Mihail.Tomov92 avatar Mihail.Tomov92 0 Точки

Браво, супер е решението! 

Позволих си да копирам начина на решение и да го превърна в C# код (много трудно, 2 промени направих), понеже я имахме като задача в C# PB. Ето го за зациклилите като мен там:

using System;

class MainClass 
{
  public static void Main (string[] args) 
  {
        double money = double.Parse(Console.ReadLine());
        int coin = 0;
        money = Math.Round(money * 100);

        while (money > 0) 
        {
            if (money >= 200)
            {
                coin++;
                money = money -200;
            } 
            else if (money >= 100) 
            {
                coin++;
                money = money -100;
            }  
            else if (money >= 50) 
            {
                coin++;
                money = money -50;
            } 
            else if (money >= 20) 
            {
                coin++;
                money = money -20;
            }  
            else if (money >= 10) 
            {
                coin++;
                money = money -10;
            } 
            else if (money >= 5) 
            {
                coin++;
                money = money -5;
            } 
            else if (money >= 2) 
            {
                coin++;
                money = money -2;
            } 
            else if (money >= 1) 
            {
                coin++;
                money = money -1;
            }
        }
        
        Console.WriteLine(coin);
  }
}

0
kittenlina avatar kittenlina 7 Точки

Привет!

След като цял ден си блъскам главата с тази задача и гледам различни решения, си позволих да преработя вашето. Направих само 2 промени и то сработи - махнах проверките за 1000, 500.. до 2лв, защото ми се виждат излишни след като търсим ресто на машина, която работи само с дребни банкноти и монети. По принцип и с тях не е проблем.

След това пуснах кода в дебъг режим и още на първата врътка забелязах, че закръгленията на double могат да направят проблем при повече инициации, затова се върнах нагоре в кода и направих това, което и колегите по-горе - умножих рестото по 100 (за да не използваме закръгленията на double) и после използвах Math.Round за даполучим цяло число (макар и от тип double). Според мен грешните резултати са точно от закръгленията на double в някой от тестовете.

Ето и вашият код с тези 2 промени, взе 100/100 точки в Judge:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _05.Coins
{
    class Program
    {
        static void Main(string[] args)
        {
            double sum = double.Parse(Console.ReadLine());
            int coins = 0;
            sum = Math.Round(sum * 100);

            while (sum > 0)
            {                               
                if (sum >= 200)
                {
                    sum -= 200;
                    coins++;
                }
                else if (sum >= 100)
                {
                    sum -= 100;
                    coins++;
                }
                else if (sum >= 50)
                {
                    sum -= 50;
                    coins++;
                }
                else if (sum >= 20)
                {
                    sum -= 20;
                    coins++;
                }
                else if (sum >= 10)
                {
                    sum -= 10;
                    coins++;
                }
                else if (sum >= 5)
                {
                    sum -= 5;
                    coins++;
                }
                else if (sum >= 2)
                {
                    sum -= 2;
                    coins++;
                }
                else if (sum >= 1)
                {
                    sum -= 1;
                    coins++;
                }
            }
            Console.WriteLine(coins);
        }
    }
}

0
TeodorStefanovPld avatar TeodorStefanovPld 1278 Точки

а може просто да ползвате decimal 

0
kittenlina avatar kittenlina 7 Точки

В контекста на домашното още не знаем за decimal

0
TeodorStefanovPld avatar TeodorStefanovPld 1278 Точки

В контекста да станете програмисти, не чакайте само лекции и домашни. И този тест ви чупи точно защото там е decimal и ако се ползва decimal си минават.

А за добрите практики никога е е късно. Става ли дума за пари винаги се ползва decimal заради спецификите на закръгляне на 2та primitive types.

-1
kittenlina avatar kittenlina 7 Точки

Ок, взимам си бележка за всички бъдещи задачи, свързани с пари laugh

0
TeodorStefanovPld avatar TeodorStefanovPld 1278 Точки

Бележката трябва да е по-обща. 

Да гледаш за нещо ново или различно или edge case. На лекции упражнения никога няма да ви кажат всичко просто няма време, а и поняокга нарочно се слагат уловки, а и ако сте избрали пътя винаги трябва да се рови. Е днес е неделя но пак уча нови неща копая в kubernetis. А можеше да си пия бирата или нещо подобно.

-1