Loading...
Georgi_555 avatar Georgi_555 11 Точки

Проблем с Equal Sums Left Right Position - memory limit

Здравейте, имам проблем със задачата Equal Sums Left Right Position. Дава ми 90/100 заради memory limit. Ако някой може да ми прати правилно решение или да поправи моето: https://pastebin.com/fX7S5tWh. Ще съм много благодарен!! 

Това е условието:

Напишете програма, която чете от конзолата две петцифрени цели числа в диапазона от 10000 до 99999.
Първото число винаги ще бъде по-малко от второто. Да се намерят и отпечатат на конзолата, разделени с
интервал, онези числа, които се намират между прочетените от конзолата числа и отговарят на следните
условия:
 сумите от двете най-десни и двете най-леви цифри на проверяваното число да са равни
 ако сумите са различни към по-малката от тях се прибавя средната цифра, на проверяваното число и
получената нова сума се сравнява с другата сума. Ако те са равни числото се отпечатва.
Ако няма числа, отговарящи на условията на конзолата не се извежда резултат.

Тагове:
0
Programming Basics
kkaraivanov avatar kkaraivanov 486 Точки
Best Answer

Днес имаше изпит заради което Judge да ти връща някоя грешка заради памет, а кода да ти е правилен. Все пак ако искаш, пращам ти моето решение "100/100 in Judge" за да сравниш и коригираш грешката ако има такава.

int ferstNum = int.Parse(Console.ReadLine());
int secondNum = int.Parse(Console.ReadLine());

for (int i = ferstNum; i <= secondNum; i++)
{
    string curentNum = i.ToString();
    int leftNum = 0;
    int rightNum = 0;
    int averageNum = 0;
    for (int j = 0; j < curentNum.Length; j++)
    {
        if (j < 2)
        {
            leftNum += int.Parse((curentNum[j]).ToString());
        }
        else if (j >=2 && j < 3)
        {
            averageNum = int.Parse((curentNum[j]).ToString());
        }
        else
        {
            rightNum += int.Parse((curentNum[j]).ToString());
        }
    }
    if (leftNum == rightNum)
    {
        Console.Write(curentNum + " ");
    }
    else
    {
        if (leftNum < rightNum)
        {
            leftNum += averageNum;
        }
        else
        {
            rightNum += averageNum;
        }
        if (leftNum == rightNum)
        {
            Console.Write(curentNum + " ");
        }
    }
}

 

0
Georgi_555 avatar Georgi_555 11 Точки

Мерсии!!

 

0
EvgeniJD avatar EvgeniJD 35 Точки

Здравейте! С вашето решение наистина дава 100/100.Моето е направо същото, но ми дава винаги 90/100. Моля Ви, помогнете ми да си намеря грешката, че от два дни ме човърка тая задача!

using System;

namespace EqualSumsLeftRightPositions
{
    class Program
    {
        static void Main(string[] args)
        {
            int startNum = int.Parse(Console.ReadLine());
            int endNum = int.Parse(Console.ReadLine());

            for (int currentNum = startNum; currentNum <= endNum; currentNum++)
            {
                string currentNumString = currentNum.ToString();

                int leftSum = 0;
                int rightSum = 0;
                int midSum = 0;

                for (int pos = 0; pos < currentNumString.Length; pos++)
                {
                    if (pos < 2)
                    {
                        leftSum += int.Parse(currentNumString[pos].ToString());
                    }
                    else if (pos == 2)
                    {
                        midSum += int.Parse(currentNumString[pos].ToString());
                    }
                    else
                    {
                        rightSum += int.Parse(currentNumString[pos].ToString());
                    }
                }

                if (leftSum == rightSum)
                {
                    Console.Write($"{currentNum} ");
                }
                else
                {
                    if (leftSum < rightSum)
                    {
                        leftSum += midSum;
                    }
                    else if (rightSum < leftSum)
                    {
                        rightSum += midSum;
                    }

                    if (leftSum == rightSum)
                    {
                        Console.Write($"{currentNum} ");
                    }
                }
            }
        }
    }
}
 

0
kkaraivanov avatar kkaraivanov 486 Точки

Поправих кода ти, би трябвало да ти даде 100/100. Заповядай:

using System;
namespace EqualSumsLeftRightPositions
{
    class Program
    {
        static void Main(string[] args)
        {
            int startNum = int.Parse(Console.ReadLine());
            int endNum = int.Parse(Console.ReadLine());
            for (int currentNum = startNum; currentNum <= endNum; currentNum++)
            {
                string currentNumString = currentNum.ToString();
                int leftSum = 0;
                int rightSum = 0;
                int midSum = 0;
                for (int pos = 0; pos < currentNumString.Length; pos++)
                {
                    if (pos < 2)
                    {
                        leftSum += int.Parse(currentNumString[pos].ToString());
                    }
                    else if (pos >= 2 && pos < 3)
                    {
                        midSum = int.Parse(currentNumString[pos].ToString());
                    }
                    else
                    {
                        rightSum += int.Parse(currentNumString[pos].ToString());
                    }
                }
                if (leftSum == rightSum)
                {
                    Console.Write($"{currentNum} ");
                }
                else
                {
                    if (leftSum < rightSum)
                    {
                        leftSum += midSum;
                    }
                    else
                    {
                        rightSum += midSum;
                    }
                    if (leftSum == rightSum)
                    {
                        Console.Write($"{currentNum} ");
                    }
                }
            }
        }
    }
}

Мисля че грешката идва от тук:

else if (pos == 2)
{
   midSum += int.Parse(currentNumString[pos].ToString());
}


трябва да бъде

else if (pos == 2)
{
   midSum = int.Parse(currentNumString[pos].ToString());
}

 

0
10/11/2019 17:48:43
EvgeniJD avatar EvgeniJD 35 Точки

Благодаря Ви за бързия отговор, но съдията продължава да ми дава 90/100. Не мога ли от някъде да видя какъв тест ми пуска, че да се резбере къде гърми?

0
kkaraivanov avatar kkaraivanov 486 Точки

kostadin.karraivanov - това ми е профила в Скайп

пиши ми там за да не спамим форума.

0
kkaraivanov avatar kkaraivanov 486 Точки

Кода работи и дава 100/100. Грешката беше в принтираната променлива.

using System;

namespace EqualSumsLeftRightPositions

{
    class Program
    {
        static void Main(string[] args)
        {
            int startNum = int.Parse(Console.ReadLine());
            int endNum = int.Parse(Console.ReadLine());

            for (int currentNum  = startNum; currentNum  <= endNum; currentNum ++)
            {
                string currentNumString = currentNum .ToString();
                int leftSum = 0;
                int rightSum = 0;
                int midSum = 0;

                for (int pos = 0; pos < currentNumString.Length; pos++)
                {
                    if (pos < 2)
                    {
                        leftSum += int.Parse(currentNumString[pos].ToString());
                    }
                    else if (pos >= 2 && pos < 3)
                    {
                        midSum = int.Parse(currentNumString[pos].ToString());
                    }
                    else
                    {
                        rightSum += int.Parse(currentNumString[pos].ToString());
                    }
                }

                if (leftSum == rightSum)
                {
                    Console.Write($"{currentNumString} ");
                }
                else
                {
                    if (leftSum < rightSum)
                    {
                        leftSum += midSum;
                    }
                    else
                    {
                        rightSum += midSum;
                    }
                    if (leftSum == rightSum)
                    {
                        Console.Write($"{currentNumString} ");
                    }
                }
            }
        }
    }
}

 

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