Loading...
Vesolini avatar Vesolini 7 Точки

02. From Left to The Right Data Types and Variables - More Exercise

Здравейте банда ! Може ли да ми помогнете да открия грешката си - съдията ми дава 25/100, а честно казано не виждам къде греша ?

https://pastebin.com/dbCkG80Y 

 

2.From Left to The Right

You will receive number which represent how many lines we will get as an input. On the next N lines, you will receive a string with 2 numbers separated by single space. You need to compare them. If the left number is greater than the right number, you need to print the sum of all digits in the left number, otherwise print the sum of all digits in the right number.

Examples

Input

Output

2

1000 2000

2000 1000

2

2

4

123456 2147483647

5000000 -500000

97766554 97766554

9999999999 8888888888

46

5

49

90

Тагове:
0
Fundamentals Module 26/05/2019 16:27:46
Iv_Konov avatar Iv_Konov 383 Точки
Best Answer

Здравей, 

 

Коригирай и за двете числа:

sum += Math.Abs(numbers[1]) % 10;

и си готов..

 

Допълнително може да опростиш решението с:

long biggerNum = Math.Max(intArr[0], intArr[1]);

 

Поздрави,

Иван

0
26/05/2019 16:53:08
VasilKotsev avatar VasilKotsev 830 Точки

Имаш повтарящ се код, който си реве да го изнесеш в метод. Също това деление не е най-оптималния вариант за решението на тази задача защото губиш CPU Cycles в while-а с тези модулни и целочислени деления. Вземи числото като низ и просто го обхождай. Ползвай Math.Abs() защото ще имаш разминаване иначе в общата сума на цифрите.

namespace SandBox
{
    using System;
    using System.Linq;

    public class EntryPoint
    {
        public static void Main()
        {
            int numberOfLines = int.Parse(Console.ReadLine());

            for (int i = 0; i < numberOfLines; i++)
            {
                long[] currentLineNumbers = Console.ReadLine()
                    .Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                    .Select(long.Parse)
                    .ToArray();

                long leftNumber = currentLineNumbers[0];
                long rightNumber = currentLineNumbers[1];

                var currentSum = leftNumber > rightNumber
                    ? CalculateSumDigitsOfNumber(leftNumber)
                    : CalculateSumDigitsOfNumber(rightNumber);

                Console.WriteLine(currentSum);

            }
        }

        public static double CalculateSumDigitsOfNumber(long number)
        {
            double sum = 0D;
            var numberAsString = Math.Abs(number).ToString();

            foreach (var @char in numberAsString)
            {
                sum += char.GetNumericValue(@char);
            }

            return sum;
        }
    }
}

 

0
Lachezar.Ivanov avatar Lachezar.Ivanov 14 Точки

Здравейте,

ето едно решение без масиви, което е дълго, но работи:

        {
            int linesNumber = int.Parse(Console.ReadLine());

            for (int i = 0; i < linesNumber; i++)
            {
                string input = Console.ReadLine();
                string leftNumber = "";
                string rightNumber = "";
                int count = 0;

                for (int j = 0; j < input.Length - 1; j++)
                {
                    char symbol = input[j];
                    if (symbol != ' ')
                    {
                        leftNumber += symbol;
                        count++;
                    }
                    else
                    {
                        break;
                    }
                }
                for (int k = count + 1; k < input.Length; k++)
                {
                    char symbol = input[k];
                    rightNumber += symbol;
                }
                long left = long.Parse(leftNumber);
                long right = long.Parse(rightNumber);

                long maxNumber = Math.Max(left, right);
                long sum = 0;
                while (Math.Abs(maxNumber) > 0)
                {
                    sum += maxNumber % 10;
                    maxNumber /= 10;
                }
                Console.WriteLine(Math.Abs(sum));
            }
        } 
 

0
Nay46 avatar Nay46 0 Точки

Ето и едно мое решение , което ми дава 100 от 100 , дано е полезно .

using System;

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

            for (int i = 1; i <= inputNumber; i++)
            {
                string input = Console.ReadLine();
                string stringBeforeSpace = input.Substring(0, input.IndexOf(" "));
                string stringAfterSpace = input.Substring(input.IndexOf(" ") + 1);
                long numLeft = ( long.Parse(stringBeforeSpace));
                long numRight = ( long.Parse(stringAfterSpace));

                long maxNumber = Math.Max(numLeft, numRight);
                long sum = 0;
                while (Math.Abs(maxNumber) > 0)
                {
                    sum += maxNumber % 10;
                    maxNumber /= 10;
                }
                Console.WriteLine(Math.Abs(sum));

            }
            
        }
    }
}
 

0
fanya.karamfilova avatar fanya.karamfilova 4 Точки

Необходимо е да бъдат заменени типовете от long на BigInteger, за да се получи резултат 100/100.

Особеното е, че при BigInteger не мпже да се използват Math Method. 

Ако искаме да получим абсолютната стойност на дадена променлива (input) синтаксиса е следният:

BigInteger absoluteValue = BigInteger.Abs(input)

0
IvaYorgova avatar IvaYorgova 17 Точки

Ето едно решение и от мен, дава 100/100:

using System;

namespace FromLeftToRight
{
    class Program
    {
        static void Main(string[] args)
        {
            long n = int.Parse(Console.ReadLine());

            for (int i = 1; i <= n; i++)
            {
                string numbers = Console.ReadLine();

                string firstNumAsString = string.Empty;
                string secondNumAsString = string.Empty;
                bool isFirstNum = true;

                for (int j = 0; j < numbers.Length; j++)
                {
                    char currentDigit = numbers[j];

                    if (isFirstNum && numbers[j] != ' ')
                    {
                        firstNumAsString += currentDigit;
                    }
                    else if (!isFirstNum && numbers[j] != ' ')
                    {
                        secondNumAsString += currentDigit;
                    }
                    else if (numbers[j] == ' ')
                    {
                        isFirstNum = false;
                    }
                }

                long firstNumber = long.Parse(firstNumAsString);
                long secondNumber = long.Parse(secondNumAsString);

                if (firstNumber >= secondNumber)
                {
                    long sumOfDigits = 0;
                    long copyNumber = Math.Abs(firstNumber);

                    while (copyNumber > 0)
                    {
                        long currentDigit = copyNumber % 10;
                        sumOfDigits += currentDigit;
                        copyNumber /= 10;
                    }
                    Console.WriteLine(sumOfDigits);
                }
                if (secondNumber > firstNumber)
                {
                    long sumOfDigits = 0;
                    long copyNumber = Math.Abs(secondNumber);

                    while (copyNumber > 0)
                    {
                        long currentDigit = copyNumber % 10;
                        sumOfDigits += currentDigit;
                        copyNumber /= 10;
                    }
                    Console.WriteLine(sumOfDigits);
                }
            }
        }
    }
}

 

0
Jordanzhendov avatar Jordanzhendov 0 Точки
 Ето решение на java и то максимално елементарно!

package ExerciseDataTypesAndVariables;

import java.util.Scanner;

public class FromLeftToRight {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int inputLines = Integer.parseInt(scanner.nextLine());

        while (inputLines > 0) {
            
            String[] input = scanner.nextLine().split(" ");

            int digitSum = 0;

            long leftNumber = Long.parseLong(input[0]);
            long rightNumber = Long.parseLong(input[1]);

            if (leftNumber >= rightNumber) {
                
                for (int j = 0; j < input[0].length(); j++) {
                    digitSum += Math.abs(leftNumber % 10);
                    leftNumber = leftNumber / 10;
                }
            } else {
                
                for (int j = 0; j < input[1].length(); j++) {
                    digitSum += Math.abs(rightNumber % 10);
                    rightNumber = rightNumber / 10;

                }

            }

            System.out.println(digitSum);

            inputLines--;
        }

    }
}
0
Thehea7 avatar Thehea7 1 Точки

Ето решение което включва само знания които сме учили.

 

int n = int.Parse(Console.ReadLine());

for (int i = 0; i < n; i++)
{
    string number1 = "";
    string number2 = "";
    string input = Console.ReadLine();
    bool spaceIsFound = false;
    for (int j = 0; j < input.Length; j++)
    {
        if (input[j] == ' ')
        {
            spaceIsFound = true;
            continue;
        }
        if (!spaceIsFound)
        {
            number1 += input[j];
        }
        else number2 += input[j];
    }

    long number1Int = long.Parse(number1);
    long number2Int = long.Parse(number2);
    if (number1Int >= number2Int)
    {
        int sum1 = 0;
        while (Math.Abs(number1Int) > 0)
        {
            long lastDigit = number1Int % 10;
            sum1 += Math.Abs((int)lastDigit);
            number1Int /= 10;
        }
        Console.WriteLine(sum1);
    }
    else
    {
        int sum2 = 0;
        while (Math.Abs(number2Int) > 0)
        {
            long lastDigit = number2Int % 10;
            sum2 += Math.Abs((int)lastDigit);
            number2Int /= 10;
        }
        Console.WriteLine(sum2);
    }
}
        
    
    

 

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