Професионална програма
Loading...
+ Нов въпрос
PikiMarinova avatar PikiMarinova 2 Точки

08. Letters Change Numbers - Text Processing - Exercise (Runtime Error)

Здравейте, колеги!

Опитвам се да реша посочената в заглавието задача, но ми дава Runtime Error на 5-тия тест. Не мога, и не мога да разбера защо.

Judge линк: https://judge.softuni.bg/Contests/Compete/Index/1217#7

Това е кодът ми: (https://judge.softuni.bg/Contests/Submissions/View/18444151)

using System;
using System.Collections.Generic;

namespace _08.LettersChangeNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] inputs = Console.ReadLine().Split(" ", StringSplitOptions.RemoveEmptyEntries);
            Dictionary<string, double> dic = new Dictionary<string, double>();

            for (int i = 0; i < inputs.Length; i++)
            {
                string text = inputs[i];

                char firstLetter = text[0];
                char lastLetter = text[text.Length - 1];
                double number = int.Parse(text.Substring(1, text.Length - 2)) * 1.0;

                if (char.IsUpper(firstLetter))
                {
                    number /= (firstLetter - 64) * 1.0;
                }
                else if (char.IsLower(firstLetter))
                {
                    number *= (char.ToUpper(firstLetter) - 64) * 1.0;
                }

                if (char.IsUpper(lastLetter))
                {
                    number -= (lastLetter - 64) * 1.0;
                }
                else if (char.IsLower(lastLetter))
                {
                    number += (char.ToUpper(lastLetter) - 64) * 1.0;
                }

                dic.Add(text, number);
            }

            double sum = 0.0;

            foreach (var item in dic)
            {
                sum += item.Value;
            }
            
            Console.WriteLine($"{sum:F2}");
        }
    }
}

 

Благодаря предварително за помощта.

Тагове:
0
C# Fundamentals
MartinBG avatar MartinBG 3152 Точки
Best Answer

Запазвате резултатите за всяко число в Dictionary, като за ключ използвате текста.

Това ще гръмне, ако текста се среща повече от веднъж.

Например при вход:

A12b A12b
End

Програмата ще гръмне с тази грешка:

Unhandled Exception: System.ArgumentException: An item with the same key has already been added. Key: A12b
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
   ...

 

Съкратено решение:

using System;

namespace _08.LettersChangeNumbers
{
    internal static class Program
    {
        private static void Main()
        {
            var inputs = Console.ReadLine().Split(" ", StringSplitOptions.RemoveEmptyEntries);
            var sum = 0.0;

            foreach (var text in inputs)
            {
                var firstLetter = text[0];
                var lastLetter = text[text.Length - 1];
                var number = double.Parse(text.Substring(1, text.Length - 2));

                if (char.IsUpper(firstLetter))
                {
                    number /= 1 + firstLetter - 'A';
                }
                else if (char.IsLower(firstLetter))
                {
                    number *= 1 + firstLetter - 'a';
                }

                if (char.IsUpper(lastLetter))
                {
                    number -= 1 + lastLetter - 'A';
                }
                else if (char.IsLower(lastLetter))
                {
                    number += 1 + lastLetter - 'a';
                }

                sum += number;
            }

            Console.WriteLine($"{sum:F2}");
        }
    }
}

 

0
23/11/2020 00:33:14
PikiMarinova avatar PikiMarinova 2 Точки

Много Ви благодаря. Не се бях замислила за ключовете в Dictionary.

1
sukalu88 avatar sukalu88 31 Точки

I don't know what to say really, what you share is so good and useful for the community, I feel that it makes our community much more developed, thanks. fireboy and watergirl

0