Професионална програма
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 395 Точки

Аз успях да намеря просто решение само с делене и модулно делене на под 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 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