Софтуерно Инженерство
Loading...
+ Нов въпрос
rumirtp avatar rumirtp 0 Точки

C# Fundamentals - Data Types - 11.Snowballs [90/100]

Немога да разбера защо на 5- ти тест ми дава грешка, това е кодът ми:

using System;

namespace zad11
{
    class Program
    {
        static void Main(string[] args)
        {
            int nSnowballs = int.Parse(Console.ReadLine());
            decimal maxrezult= 0;
            uint maxsnow = 0;
            ushort maxtime = 0;
            uint maxquality = 0;
            
            for (int i = 1; i <= nSnowballs; i++)
            {
                
                uint snowballSnow = uint.Parse(Console.ReadLine());
                ushort snowballTime= ushort.Parse(Console.ReadLine());
                uint snowballQuality = uint.Parse(Console.ReadLine());
                double rezult = snowballSnow / snowballTime;
                decimal rezult1 = (decimal)Math.Pow(rezult,snowballQuality);
                if (rezult1 > maxrezult)
                {
                    maxrezult =rezult1;
                    maxsnow= snowballSnow;
                    maxtime = snowballTime;
                    maxquality = snowballQuality;
                }
            }
            if (maxrezult!=0)
            {
                Console.WriteLine($"{maxsnow} : {maxtime} = {maxrezult} ({maxquality})");
            }
            
           
        }
    }
}
 

Тагове:
0
C# Fundamentals
krum_43 avatar krum_43 238 Точки

Задачата е коментирана многократно из форума.Там където повдигаш на степен (decimal rezult1 = (decimal)Math.Pow(rezult,snowballQuality).

Израза от дясно на равенството става много голям и не се побира в decimal.

Използвай вместо него BigInteger.

 

0
Dani0000 avatar Dani0000 1 Точки

На практика, ако се спазва условието на задачата, най-големмия резултат влиза в размер double, но и по този начин се чупи кода.

btw същия код пуснат на Java минава с double променлива.

Бих искал да видя входа на този тест#5.

0
AleksPopov avatar AleksPopov 3 Точки

Идеята, че проверката не минава ако променливите не са от тип BigInteger. За да можеш да го изполваш трябва напишеш using System.Numerics; под using System; Единствените променливи, които съм оставил int са nSnowballs и snowballQuality(защото прави проблем при BigInteger.Pow).

По-добре сам да я решиш, но ако не става ето и моето решение.https://pastebin.com/sb1xW2qp

Успех!

0
rumirtp avatar rumirtp 0 Точки

Алекс много благодаря, разгледах решението, така е работещо. Въпреки това доста неща не са ми ясни за BigInteger и  какво ни дава: using System.Numerics, но с това ще трябва да се справя. 

0