Проверка налогового кода, что не так, какая разница? - PullRequest
1 голос
/ 27 марта 2020

, пожалуйста, помогите мне со следующим кодом. Сам код взят из UriOnlineJudge (https://www.urionlinejudge.com.br/judge/en/problems/view/1051), но после многих часов, потраченных на выяснение проблемы, которую мне пришлось решить на этом сайте. Во-первых, это:



            double sal = 0.0, t8 = 0.0, t18 = 0.0, t28 = 0.0;
            sal = double.Parse(Console.ReadLine());
            if(sal <= 2000.0)
            {
                Console.WriteLine("Isento");
            }else if( 2000.0 < sal && sal <= 3000.0)
            {
                t8 = ((sal - 2000.00) * 0.08);
                Console.WriteLine("R$ " + String.Format("{0:F2}", t8));
            } else if (3000.0 < sal && sal <= 4500.0)
            {
                t18 = ((sal - 3000.00) * 0.18 + 1000.00 * 0.08);
                Console.WriteLine("R$ " + String.Format("{0:F2}", t18));
            }
            else
            {
                t28 = ((sal - 4500.00) * 0.28 + 1500.00 * 0.18 + 1000.00 * 0.08);
                Console.WriteLine("R$ " + String.Format("{0:F2}", t28));
            }
           Console.ReadLine();

После нескольких часов размышлений я решил сделать его "чище" (меньше строк) и повторил это так, и это удивительно сработало, но я все еще не понимал, почему это то, что для меня они одинаковы, второй это:


    double sal = 0.0, t8 = 0.0, t18 = 0.0, t28 = 0.0;
            sal = double.Parse(Console.ReadLine());
            if(sal <= 2000.0)
            {
                Console.WriteLine("Isento");
            }else if( 2000.0 < sal && sal <= 3000.0)
            {
                sal = sal - 2000.0;
                t8 = sal * 8.0 / 100.0;
                t8 = sal + t8;
                Console.WriteLine("R$ " + String.Format("{0:0.00}", t8));
            } else if (3000.0 < sal && sal <= 4500.0)
            {
                sal = sal - 3000.0;
                t8 = 1000.0 * 8.0 / 100.0;
                t18 = sal;
                t18 = t18 * 18.0 / 100.0;
                t18 = t18 + t8;
                Console.WriteLine("R$ " + String.Format("{0:0.00}", t18));
            }
            else
            {
                sal = sal - 4500.0;
                t8 = 1000.0 * 8.0 / 100.0;
                t18 = 1500.0 * 18.0 / 100.0;
                t28 = sal;
                t28 = t28 * 28.0 / 100.0;
                t28 = t28 + t18 + t8;
                Console.WriteLine("R$ " + String.Format("{0:0.00}", t28));
            }
           Console.ReadLine();

Теперь я проверял их туда-сюда, и они показывают те же результаты, но г-н. Компилятор Ури продолжает показывать мне, что второй код все еще на 5% неверен, прошу вас, помогите найти ошибку в моих путях.

1 Ответ

2 голосов
/ 27 марта 2020

Столкнувшись с такой проблемой, написать контрольные примеры

Если ваш код является первым блоком, ваша ошибка здесь

return (sal - 2000.00) * 0.08;

это должно быть

return (sal - 2000.00) + (sal - 2000.00) * 0.08;

, потому что исходный код

sal = sal - 2000.0;
t8 = sal * 8.0 / 100.0;
// you aren't doing this step 
t8 = sal + t8;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...