Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Kallyy7 avatar Kallyy7 102 Точки

https://pastebin.com/ANLHpjwn не знам колко добре съм го направила, но джъдж ми дава 100/100. .Реших с 2 while цикъла да го направя защото иначе с толкова много for цикли ми се стори малко неприятно особено ако трябва да си търся грешки и да дебъгвам. 

2
iliaanastasov avatar iliaanastasov 1 Точки

Благодаря. В крайна сметка ми помогна да си открия грешката. 
Може да е полезно, ако някой се интересува. Явно проблема беше, че приравнявам стотинката към лев, а не обратното- 1 стотинка = 0,01лв , а трябва да е 1лв = 100 стотинки.

 

 

0
Dimitar_Petkov_Petkov avatar Dimitar_Petkov_Petkov 169 Точки

Здравей,

според мен не ти е там грешката, 1 стотинка си е 0.01, но DECIMAL !!! Винаги когато става дума за пари или прецизни сметки с плаваща запетая, използвай decimal data type. Ако ти е интересно потърси за "неточността" на  float и double. Конкретно в кода ти промених 

 decimal n = decimal.Parse(Console.ReadLine());

после и това за да не цикли излишно

for (int g = 0; g < 2; g++)

и накрая кастнах

 ((decimal)(a * 0.01 + b * 0.02 + c * 0.05 + d * 0.10 + e * 0.20 + f * 0.50 + g * 1.00 + h * 2.00) != n)

 даде 100/100

 

1
patzo_84 avatar patzo_84 1 Точки

https://pastebin.com/iSw9eH9W   Ето и моето решение само с if - ове.

0
TsTanev avatar TsTanev 5 Точки

Ето още едно излишно сложно решение....моето: 1 while цикъл + много else-if проверки

 

https://pastebin.com/SsWjDgMr

0
RuNNeR4142 avatar RuNNeR4142 396 Точки

Аз успях да намеря просто решение само с делене и модулно делене на под 40 реда: https://pastebin.com/R4J6RLAn

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