Загрузка...

Задачи С# [Codewars #1]

Тема в разделе C# создана пользователем kosolapka 19 мар 2019. 591 просмотр

  1. kosolapka
    kosolapka Автор темы 19 мар 2019 Слишком ленивый, чтобы писать. 796 2 янв 2018
    Я на форуме не очень давно, но заметил, что есть группа людей, которые либо начали учить ЯП, либо только собираются сделать это, и не знают, с чего начать и чем заниматься.
    Недавно я открыл для себя такой сайтец как: CodeWars. Сайт будет полезен тем, кто знает основы языка, но не знают что именно делать и как развиваться. На сайте можно найти очень много задач, решая которые можно самостоятельно поднимать свой уровень владения языком программирования. Также, не стоит забывать, что каждая задачка уникальна, и надо к каждой придумать подходящий алгоритм решения(а как мы помним, умение создавать рабочие алгоритмы намного важнее, чем написание кода). Также, после решения задачки вам будет доступно посмотреть решение других пользователей - очень важный аспект, так как то, что ты делаешь в 5-10 строчек кода, другие сделали в 1 строчку, что сильно мотивирует находить наилучший способ решения задачи.
    Сегодня мне попалась очень интересная задачка:
    In this kata, you must create a digital root function.
    A digital root is the recursive sum of all the digits in a number. Given n, take the sum of the digits of n. If that value has more than one digit, continue reducing in this way until a single-digit number is produced. This is only applicable to the natural numbers.

    На русском:
    В этом ката вы должны создать функцию цифрового корня.
    Цифровой корень - это рекурсивная сумма всех цифр в числе. Учитывая n, возьмите сумму цифр n. Если это значение содержит более одной цифры, продолжайте сокращать таким образом, пока не будет получено однозначное число. Это применимо только к натуральным числам.
    Первое, что пришло в голову - это конечно же узнать сумму всех чисел переменной. Алгоритм решения:
    1. Создаем While цикл, в котором ставим условие, чтобы заданное число было больше 0
    2. Берем остаток деления переменной на 10 и складываем в новую переменную, в которой и будем сохранять сумму.
    3. Делим переменную на 10.
    Данный алгоритм решает частично задачку. Используя его, мы высчитываем сумму чисел переменной, но в задачке сказано, что необходимо, чтобы конечная сумма была однозначным числом.
    Немножко подумав, было принято решение использовать для решения рекурсию. Алгоритм был таким:
    1. Используем первый алгоритм
    2. Добавляем проверку при помощи оператора IF, при помощи которого мы будем проверять, если переменная сумма - однозначное число.
    В случае правды - мы возвращаем значение.
    В случае неправды - заново вызываем свою функцию.
    Код
    public class Number
    {
    public int DigitalRoot(long n)
    {
    long value=0;
    while(n>0)
    {
    value = value + n%10;
    n = n/10;
    }
    if((value/10)!=0)
    return DigitalRoot(value);
    else
    return (int)value;
    }
    }
    Ссылка на задание: https://www.codewars.com/kata/541c8630095125aba6000c00
     
  2. 111lolololo
    111lolololo 24 мар 2019 また、これにより金型のか!? 9 15 апр 2017
    Прикольный сайт:thinking:
     
  3. k0mpact
    k0mpact 10 апр 2019 Разработка - zelenka.guru/threads/4496003/ 36 8 янв 2017
    Спасибо за ссылку на полезный сайт)
     
  4. AlexWlind
    AlexWlind 21 апр 2019 Моя трагедия комедий балаганных смешней 0 20 апр 2019
    Благодарю за полезную информацию.
     
  5. Finzes
    Finzes 24 апр 2019 0 4 авг 2018
    по коду видно что ты только учится )
     
  6. deepl_inactive
    Можно ещё через .ToString() и Int.Parse сделать.
     
Top
Загрузка...