0

Моя проблема заключается в том, что консоль не выводит мне ответ, никак. Что бы я не менял (только код не переписывал), прошу помочь, дать ответ, почему не выводится результат и как его вывести. (Ошибок при компиляции нет, как и эксепшнов в рантайме, мистика)

/*
На вход идёт 3х-значное число, которое мы разбиваем на 3 цифры,
которые разбили на две суммы. 1го и 2го, 2го и 3го.
Например, число "123" из него получаем 2 суммы "1 + 2 = 3" и "2 + 3 = 5",
после мы должны вывести 2 суммы в порядке убывания, как в данном случае "53".
Главный вопрос - какое наименьшее трёхзначное число даст на выходе "1412"?
(вывести это число) 
*/

class Program { public static void MyFunction() { for (int i = 100; i < 1000; i++) { string Str = Convert.ToString(i); //Перевожу числовое i в строку, чтобы разбить посимвольно. char[] Arr = Str.ToCharArray(); // Разбиваю int Sum1 = (int)Arr[0] + (int)Arr[1]; int Sum2 = (int)Arr[1] + (int)Arr[2]; string FirstRes = Convert.ToString(Math.Max(Sum1, Sum2)); // Беру большую из сумм string SecondRes = Convert.ToString(Math.Min(Sum1, Sum2)); // Меньшую из сумм string Result = FirstRes + SecondRes; if (Result == "1412") // Условие выполнения { int OutputResult = i; Console.WriteLine(OutputResult); break; } } }

public static void Main(string[] args)
{
    MyFunction();
    Console.ReadLine();
}

}

Постарался поподробнее всё расписать от условия, что в комментарии в коде, до комментария строк кода. Надеюсь, что мне смогут помочь с моей (скорее всего тривиальной, но кто не был новичком) проблемой.

Pahtll
  • 15

1 Answers1

2

Ваша проблема в том, что вы не учли, что при приведении char к int вы получите не цифру, а ее код по таблице ASCII. Поэтому на первой же итерации цикла вы получаете число 9796. По этой причине ваше условие не выполнится никогда. Поэтому ничего и не выводится.

Если хотите получить сами цифры, а не их коды, то вам нужно вычесть 48 (код символа 0 по таблице ASCII ) из каждого полученного кода символа:

class Program
{
    public static void MyFunction() 
    {
        for (int i = 100; i < 1000; i++)
        {
            string Str = Convert.ToString(i); //Перевожу числовое i в строку, чтобы разбить посимвольно.
            char[] Arr = Str.ToCharArray(); // Разбиваю
            int Sum1 = (int)Arr[0] + (int)Arr[1] - 96; // 48*2, т.к. два числа
            int Sum2 = (int)Arr[1] + (int)Arr[2] - 96; // 48*2, т.к. два числа
            string FirstRes = Convert.ToString(Math.Max(Sum1, Sum2)); // Беру большую из сумм
            string SecondRes = Convert.ToString(Math.Min(Sum1, Sum2)); // Меньшую из сумм
            string Result = FirstRes + SecondRes;
            if (String.Equals(Result, "1412")) // Условие выполнения
            {
                int OutputResult = i;
                Console.WriteLine(OutputResult);
                break;
            }
        }
    }
public static void Main(string[] args)
{
    MyFunction();
    Console.ReadLine();
}

}

rusgeli
  • 1,806