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 2 Точки

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

Позволих си да копирам начина на решение и да го превърна в 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 9 Точки

Привет!

След като цял ден си блъскам главата с тази задача и гледам различни решения, си позволих да преработя вашето. Направих само 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 1274 Точки

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

0
kittenlina avatar kittenlina 9 Точки

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

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

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

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

-1
kittenlina avatar kittenlina 9 Точки

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

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

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

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

-1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.