Loading...

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

krasizorbov avatar krasizorbov 548 Точки

06. Equal Sums Left Right Position. Programming basics excercises

Здравейте,

Някой би ли ми помогнал? Програмата работи и отговорите са верни но ми дава memory limit и поради това имам 80 от 100.

Може би заради преобразуването. Явно има по интелигентен начин.

Ето и кода:

using System;

namespace Equal_Sum
{
    class Program
    {
        static void Main(string[] args)
        {
            int num1 = int.Parse(Console.ReadLine());
            int num2 = int.Parse(Console.ReadLine());

            int sumLeft = 0;

            int sumRight = 0;

            int middle = 0;

            for (int i = num1; i <= num2; i++)
            {
                for (int j = 0; j < i.ToString().Length; j++)
                {
                    char first = i.ToString()[j];

                    string sub = first.ToString();

                    int num3 = 0;

                    bool number_digit = Int32.TryParse(sub, out num3);

                    if (number_digit)
                    {
                        if (j == 0 || j == 1)
                        {
                            sumLeft = sumLeft + num3;
                        }
                        else if (j == 2)
                        {
                            middle = num3;
                        }
                        else if (j == 3 || j == 4)
                        {
                            sumRight = sumRight + num3;
                        }
                    }
                }
                if (sumLeft < sumRight)
                {
                    sumLeft = sumLeft + middle;

                    if (sumLeft == sumRight)
                    {
                        Console.Write("{0} ",i);
                    }
                }
                else if (sumLeft > sumRight)
                {
                    sumRight = sumRight + middle;

                    if (sumLeft == sumRight)
                    {
                        Console.Write("{0} ", i);
                    }
                }
                else if (sumLeft == sumRight)
                {
                    Console.Write("{0} ", i);
                }

                sumLeft = 0;
                sumRight = 0;
                middle = 0;

            }
        }
    }
}

 

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

Може ли условие? че така едва ли някой ще ти помогне.
И когато споделяш код, използвай pastebin, dotnetfiddle или подобни страници за споделяне на код.

0
krasizorbov avatar krasizorbov 548 Точки

Ето това е условието...

Благодаря.

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

0
AlucardDracula avatar AlucardDracula 416 Точки

ако добавиш и примерен вход и изход ще е великолепно.

 

0
krasizorbov avatar krasizorbov 548 Точки

Вход:

10000
10100

Изход:

10001 10010 10100

0
AlucardDracula avatar AlucardDracula 416 Точки

ЛИНК към judge

ЕТО ето написах едно решение набързо. 
Нека да ти разкажа и логиката:

Взимам входните данни, и създавам 2 променливи които са извън цикъла. Така програмата няма да се забави да ги създаде всеки път, а просто ще промени стойностите в тях.

var number1 = Console.ReadLine();
var number2 = Console.ReadLine();

int sum1 = 0;
int sum2 = 0;

 

Правя един цикъл от number1 до number2, и вътре както виждаш променям number1 на i.ToString():. Това е със цел string-а number1 да е равно с i всеки път, щото ако не е равно програмата няма да работи правилно, накрая сумирам двете суми.
Сега както виждаш използвам  Char.GetNumericValue, защото ако бях използвал нещо такова ** int.Parse(number1[4].ToString()); ** програмата щеше да се изпълни бавно заради .ToString()-a

for (int i = int.Parse(number1); i <= int.Parse(number2); i++)
{
    number1 = i.ToString();
    sum1 = (int) Char.GetNumericValue(number1[0]) + (int) Char.GetNumericValue(number1[1]);
    sum2 = (int) Char.GetNumericValue(number1[3]) + (int) Char.GetNumericValue(number1[4]);

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

if (sum1 != sum2)
{
    if (sum1 > sum2)
    {
        sum2 += (int)Char.GetNumericValue(number1[2]);
    }
    else
    {
        sum1 +=  (int)Char.GetNumericValue(number1[2]);
    }
}

if (sum1 == sum2)
{
    Console.Write(i + " ");
}

 

0
22/10/2018 22:47:59
krasizorbov avatar krasizorbov 548 Точки

Благодаря за това че отговори...

Наистина кода изглежда по - подреден и елегантен.

Знаех си че има по кратък път за решаването на тази задача. :)

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