Loading...
VesselinTonchev avatar VesselinTonchev 5 Точки

10. Rage Expenses

Хора, не разбиръм къде бъркам. Задачата се изпълнява коректно, коректно е и форматирането на Output - а. Отгворите са 1:1. Има изискване за време и RAM, което изпълнявам. Защо Judge  ми дава 0/100???

Solution #13898721 by VesselinTonchev for problem 10. Rage Expenses

As a MOBA challenger player, Pesho has the bad habit to trash his PC when he loses a game and rage quits. His gaming setup consists of headset, mouse, keyboard and display. You will receive Pesho`s lost games count. 
Every second lost game, Pesho trashes his headset.
Every third lost game, Pesho trashes his mouse.
When Pesho trashes both his mouse and headset in the same lost game, he also trashes his keyboard.
Every second time, when he trashes his keyboard, he also trashes his display. 
You will receive the price of each item in his gaming setup. Calculate his rage expenses for renewing his gaming equipment. 
Input / Constraints
•	On the first input line - lost games count – integer in the range [0, 1000].
•	On the second line – headset price - floating point number in range [0, 1000]. 
•	On the third line – mouse price - floating point number in range [0, 1000]. 
•	On the fourth line – keyboard price - floating point number in range [0, 1000]. 
•	On the fifth line – display price - floating point number in range [0, 1000]. 
Output
•	As output you must print Pesho`s total expenses: "Rage expenses: {expenses} lv."
•	Allowed working time / memory: 100ms / 16MB.
Examples
Input	Output	Comment
7
2
3
4
5	Rage expenses: 16.00 lv.	Trashed headset -> 3 times
Trashed mouse -> 2 times
Trashed keyboard -> 1 time
Total: 6 + 6 + 4 = 16.00 lv;
23
12.50
21.50
40
200	Rage expenses: 608.00 lv.	

using System;

namespace Rage_Expenses
{
    class Program
    {
        static void Main(string[] args)
        {
            //INPUT
            int lostGames = int.Parse(Console.ReadLine());
            double headsettPrice = double.Parse(Console.ReadLine());
            double mousePrice = double.Parse(Console.ReadLine());
            double keyboardPrice = double.Parse(Console.ReadLine());
            double displayPrice = double.Parse(Console.ReadLine());

            //VARIABLES
            int counter = 0;
            int headsetCount = 0;
            int mouseCount = 0;
            int keyboardCount = 0;
            int displayCount = 0;
            double totalPrice = 0;

            for(int i = 0; i < lostGames; i++)
            {
                if (counter %2 == 0 && counter != 0)
                {
                    headsetCount++;
                    totalPrice += headsettPrice;
                }
                if (counter %3 == 0 && counter != 0)
                {
                    mouseCount++;
                    totalPrice += mousePrice;
                }
                if (counter %6 == 0 && counter != 0)
                {
                    keyboardCount++;
                    totalPrice += keyboardPrice;

                    if (counter %12 == 0)
                    {
                        displayCount++;
                        totalPrice += displayPrice;
                    }
                }
                counter++;
            }
            Console.WriteLine($"Rage expenses: {totalPrice:F2} lv.");
        }
    }
}

 

Тагове:
0
Module: C# Advanced
kkaraivanov avatar kkaraivanov 486 Точки

Здравей колега. Като начало оправи цикъла, нека започва от 1 до <= lostGames, след това ако продължи да ти връща грешка в Judge промени проверките, т.е. махни ограничението от if и добави else..... така проверката ще е във всички случай а не само != 0. Ако не се получи, пиши да ти пратя моето решение за да свериш грешката в логиката.

0
VesselinTonchev avatar VesselinTonchev 5 Точки

Здравей и Благодаря за помощта,

 

Няма промяна в поведението

1
kkaraivanov avatar kkaraivanov 486 Точки

Ето моето решение, надявам се да ти помогне да откриеш греката

using System;

namespace RageExpenses
{
    class Program
    {
        static void Main(string[] args)
        {
            int lostGamesCount = int.Parse(Console.ReadLine());
            double headsetPrice = double.Parse(Console.ReadLine());
            double mousePrice = double.Parse(Console.ReadLine());
            double keyboardPrice = double.Parse(Console.ReadLine());
            double displayPrice = double.Parse(Console.ReadLine());

            int counterGameForBrokenHeadset = 0;
            int counterGameForBrokenMous = 0;
            int counterGameForBrokenKeyboard = 0;
            
            bool headsetBroken = false;
            bool mouseBroken = false;
            
            double price = 0;
            for (int i = 1; i <= lostGamesCount; i++)
            {
                counterGameForBrokenHeadset++;
                counterGameForBrokenMous++;

                if (counterGameForBrokenHeadset == 2)
                {
                    headsetBroken = true;
                    counterGameForBrokenHeadset = 0;
                    price += headsetPrice;
                }
                else
                    headsetBroken = false;

                if (counterGameForBrokenMous == 3)
                {
                    mouseBroken = true;
                    counterGameForBrokenMous = 0;
                    price += mousePrice;
                }
                else
                    mouseBroken = false;

                if (headsetBroken && mouseBroken)
                {
                    headsetBroken = false;
                    mouseBroken = false;
                    counterGameForBrokenKeyboard++;
                    price += keyboardPrice;
                }

                if (counterGameForBrokenKeyboard == 2)
                {
                    counterGameForBrokenKeyboard = 0;
                    price += displayPrice;
                }
            }

            Console.WriteLine($"Rage expenses: {price:f2} lv.");
        }
    }
}

 

0
VesselinTonchev avatar VesselinTonchev 5 Точки

Така се получава 100/100, но ми е чудно какво толкова иска. Просто логиката е различна, но работи...

0
RadostinStoychev avatar RadostinStoychev 128 Точки

Ето още едно решение:
Линк

Да не би при теб проблема да е от това, че проверяваш

if (counter %12 == 0)

на последната проверка вместо

if (counter % 2 == 0)

Успех :)

0
05/06/2020 11:44:43
ivailogeimara avatar ivailogeimara 37 Точки

За тази задача въобще даже няма смисъл да се ползват цикли и условни оператори. Може да се реши с 5 прости пресмятания.

Ето едно решение без условия/цикли:

Java:

Solution #13922973 by ivailogeimara for problem 10. Rage Expenses

import java.util.Scanner;

public class RageExpenses {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int lostGamesCount = scanner.nextInt();
        double headsetPrice = scanner.nextDouble();
        double mousePrice = scanner.nextDouble();
        double keyboardPrice = scanner.nextDouble();
        double displayPrice = scanner.nextDouble();

        double headsetCost = (lostGamesCount / 2) * headsetPrice;
        double miceCost = (lostGamesCount / 3) * mousePrice;
        double keyboardCost = (lostGamesCount / 6) * keyboardPrice;
        double displayCost = (lostGamesCount / 12) * displayPrice;
        double expenses = headsetCost + miceCost + keyboardCost + displayCost;

        System.out.printf("Rage expenses: %.2f lv.", expenses);
    }
}

C#:

Solution #13924332 by ivailogeimara for problem 10. Rage Expenses

using System;

namespace RageExpenses
{
    class Program
    {
        static void Main(string[] args)
        {
            int LostGamesCount = int.Parse(Console.ReadLine());
            double HeadsetPrice = double.Parse(Console.ReadLine());
            double MousePrice = double.Parse(Console.ReadLine());
            double KeyboardPrice = double.Parse(Console.ReadLine());
            double DisplayPrice = double.Parse(Console.ReadLine());

            double HeadsetCost = (LostGamesCount / 2) * HeadsetPrice;
            double MiceCost = (LostGamesCount / 3) * MousePrice;
            double KeyboardCost = (LostGamesCount / 6) * KeyboardPrice;
            double DisplayCost = (LostGamesCount / 12) * DisplayPrice;
            double Expenses = HeadsetCost + MiceCost + KeyboardCost + DisplayCost;

            Console.WriteLine($"Rage expenses: {Expenses:f2} lv.");
        }
    }
}

 

Обяснение:

Всяка 2ра игра се намира като общия брой се раздели на 2. Ако има 7 игри ще се получи 3 (3*2=6), защото е целочислено деление.

Всяка 3та по същия начин.

Пешо си чупи клавиатурата когато си чупи слушалките и мишката в една и съща игра. Т.е. търсим игра, която е 2ра и 3та едновременно или която се дели на 2*3=6 без остатък.

Пешо си чупи монитора на всяка 2ра счупена клавиатура т.е. на всяка 2*6=12 игра.

После умножаваме броя на игрите по цените и сумираме.

 

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

2
23/01/2020 04:03:15
i.bosev avatar i.bosev 1 Точки

Ето го колега кода с For Цикъл решен :

https://pastebin.com/JPPWFnuE

0
krum_43 avatar krum_43 756 Точки

Ето ти едно кратко решение и от мен:

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

namespace Rage_expenses
{
    class Program
    {
        static void Main(string[] args)
        {
            int lostgamescount = int.Parse(Console.ReadLine());
            double headsetprice = double.Parse(Console.ReadLine());
            double mouseprice = double.Parse(Console.ReadLine());
            double keybordprice = double.Parse(Console.ReadLine());
            double displayprice = double.Parse(Console.ReadLine());
            double expenses = 0;
            int countoftrechheadsets = lostgamescount / 2;
            int counttrechmouses = lostgamescount / 3;
            int countoftrechkeybords = lostgamescount / 6;
            int countoftrechdisplays = lostgamescount / 12;
            expenses = countoftrechheadsets * headsetprice + counttrechmouses * mouseprice + countoftrechkeybords * keybordprice + countoftrechdisplays * displayprice;
            Console.WriteLine($"Rage expenses: {expenses:f2} lv.");
        }
    }
}

 

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