Софтуерно Инженерство
Loading...
+ Нов въпрос
Nikodon avatar Nikodon 0 Точки

Методи - Top Number.

Привет, мъча се със задача 10 от упражненията за Методи - Top Number.

Това е решението ми, но явно не ми се получава, може ли малко помощ по кода :

 

https://pastebin.com/YrwkehGa

 

Благодаря!

Тагове:
0
C# Fundamentals
kkaraivanov avatar kkaraivanov 237 Точки

Ето моето решение, мисля че по-бързо ще откриеш проблема покода си

using System;

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

            for (long i = 1; i <= num; i++)
                GetSum(i);
                    
        }

        private static void GetSum(long l)
        {
            long sum = 0;
            long printNum = l;
            bool setOddNumber = false;

            while (l > 0)
            {
                if (l == 0)
                    break;
                long temp = l % 10;
                sum += temp;
                if (!(temp % 2 == 0))
                    setOddNumber = true;
                l /= 10;
            }

            if (sum % 8 == 0 && setOddNumber)
            {
                Console.WriteLine(printNum);
            }
        }
    }
}

Неуспявам да схвана логиката ти. В мейн получаваш число от конзолата, правиш масив с тази големина и подаваш празен масив на булев метод. Масива има само null, реално в тялото на метода ти нищо не се случва.

0
12/02/2020 23:45:18
Nikodon avatar Nikodon 0 Точки

Да, аз искам да си обясня защо е празен, идеята ми е да взема всяка цифра от рейнджа. Като дебъгна виждам, че е нула, но не разбирам защо е? Искам да взема всяка цифра от рейнджа на масива да я проверя дали е нечетна и да видя дали сумата се дели на 8. Защо не се получава. Просто не разбирам така изписан кода , какво трябва да променя за да работи.

0
kkaraivanov avatar kkaraivanov 237 Точки

Редактирах кода ти, така че да запълниш масива и да го предадеш на метода за обработка, след което метода ще ти върне стойност която да изпишеш на конзолата. Оставям на теб да развиеш логиката си за обработка на масива в метода.

using System;
using System.Linq;

namespace Extra
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();
            int[] arr = input.Select(c => int.Parse(c.ToString())).ToArray();
            int result = isTopNumber(arr);
            Console.WriteLine(result);

        }

        static int isTopNumber(int[] arr)
        {
            int sum = 0;
            bool isDivisible = false;
            bool isDigitOdd = false;

            for (int i = 1; i <= arr.Length; i++)
            {
                int currenDigit = arr[i] % 10;
                sum += currenDigit;
                arr[i] = arr[i] / 10;

                if (sum % 8 == 0)
                {
                    isDivisible = true;
                }

                if (currenDigit % 2 != 0)
                {
                    isDigitOdd = true;
                }
            }

            return sum;
        }
    }
}

 

0
Nikodon avatar Nikodon 0 Точки

Благодаря ти! Дебъгвах няколко пъти и сега ми стана ясна концепцията. Загубих време, но ми стана ясно.

0