Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
42 / 15 / 1
Регистрация: 06.12.2019
Сообщений: 429
.NET 4.x

Как это сделать через рекурсию?

09.01.2020, 11:51. Показов 2542. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
 
class Program
{
    public int[,] a = new int[37, 50];
    public int n;
    public int k;
    public int rec(int i, int t)
    {
        if (i == 0)
        {
            if (t == k)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
        if (t + i <= k)
        {
            if (a[i, t] == 0)
            {
                a[i, t] += rec(i - 1, t + 1);
                a[i, t] += rec(i + 1, t + 1);
            }
        }
        return a[i, t];
    }
    static int Main()
    {
        string str = Console.ReadLine().ToString();
        string[] result = str.Split(' ');
        string n = result[0];
        string k = result[1];
        Program lol = new Program();
        lol.n = int.Parse(n);
        lol.k = int.Parse(k);
        Console.Write(lol.rec(lol.n, 0));
        Console.ReadKey();
        return 0;
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2020, 11:51
Ответы с готовыми решениями:

Возможно ли заменить рекурсию и как это все оптимизировать
Делаю редактор текстур для своей программы. Короче, пейнт с прозрачностью. Для инструмента Fill юзаю такой код private void...

Как это задание сделать через рекурсию?
У меня есть задание посчитать биномальный коэфициент простым способом и через рекурсию. Простым способом я сделал, нужно теперь это...

Надо добавить поле приход через кассу и через расчетный счет, как это сделать 1с 8 3 ут?
надо добавить поле приход через кассу и через расчетный счет как это сделать в отчет расчеты с клиентами сам пытался добавить отчет...

32
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,144
Записей в блоге: 2
09.01.2020, 18:51
Лучший ответ Сообщение было отмечено kauakutsatsauts как решение

Решение

Студворк — интернет-сервис помощи студентам
kauakutsatsauts, у вас наверное старая версия C# и/или FW.
Если не можете установить новую, то используйте NuGet
https://docs.microsoft.com/ru-... arp/tuples

Добавлено через 6 минут
kauakutsatsauts, вот вариант без кортежей. Но возможно он будет медленнее - проверьте сами.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
        /// <summary>Определение количесво вариантов прохождения пути
        /// длинной N за К шагов</summary>
        /// <param name="k">Количество шагов</param>
        /// <param name="n">Длина пути</param>
        public static long CountPaths(int n, int k)
        {
 
            /// Количество шагов и длина пути должны быть
            /// оба чётны или нечётны
            if ((k + n) % 2 != 0)
                return 0;
 
            /// Словарь рачитанных вариантов
            Dictionary<KeyValuePair<int, int>, long> calc = new Dictionary<KeyValuePair<int, int>, long>();
 
            return _сount(k, n);
            long _сount(int step, int length)
            {
                /// Если длина пути отрицательна, значит магазин уже пройден
                /// Если длина пути равна нулю, значит до магазина уже дошли 
                /// В обоих случаях вариантов сделать следующие шаги нет
                if (length <= 0)
                    return 0;
 
                /// Если количество шагов меньше длины пути, то вариантов нет
                if (step < length)
                    return 0;
 
                /// Если количество шагов равно длине пути, то вариант 1
                if (step == length)
                    return 1;
 
                /// Проверка расчитывался ли уже такой вариант
                /// Если не расчитывался, то его расчёт
                KeyValuePair<int, int> pair = new KeyValuePair<int, int>(step, length);
                if (!calc.TryGetValue(pair, out long count))
                {
                    /// Количесво вариантов равно сумме вариантов
                    /// при шаге назад и при шаге вперёд
                    count =
                        _сount(step - 1, length + 1) // Шаг Назад
                        + _сount(step - 1, length - 1); // Шаг вперёд
                    /// Запись варианта в словарь
                    calc[pair] = count;
                }
                /// Если возврат значения
                return count;
            }
        }
1
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
09.01.2020, 18:59
Элд Хасп, я так понимаю автор в онлайне задачи проверяет. Там компилятор не обновить.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,144
Записей в блоге: 2
09.01.2020, 19:32
Цитата Сообщение от QuakerRUS Посмотреть сообщение
я так понимаю автор в онлайне задачи проверяет. Там компилятор не обновить.
Тогда вариант с KeyValuePair
0
42 / 15 / 1
Регистрация: 06.12.2019
Сообщений: 429
09.01.2020, 19:58  [ТС]
Элд Хасп, У меня у самого на компьютере не запускается не говоря уже о сайте сможешь переделать для KeyValuePair

Добавлено через 58 секунд
Элд Хасп, Спасибо всё нашол

Добавлено через 8 минут
Элд Хасп, А как в вашем коде сделать вод данных то решения надо дописывать а то не понятно как то
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Collections.Generic;
 
class Test
{
    class Program
    { 
        public static long CountPaths(int n, int k)
        {
            if ((k + n) % 2 != 0)
                return 0;
 
            Dictionary<KeyValuePair<int, int>, long> calc = new Dictionary<KeyValuePair<int, int>, long>();
 
            return _сount(k, n);
            long _сount(int step, int length)
            {
 
                if (length <= 0)
                    return 0;
 
                if (step < length)
                    return 0;
 
                if (step == length)
                    return 1;
 
                KeyValuePair<int, int> pair = new KeyValuePair<int, int>(step, length);
                if (!calc.TryGetValue(pair, out long count))
                {
                    count =
                        _сount(step - 1, length + 1) 
                        + _сount(step - 1, length - 1); 
                    calc[pair] = count;
                }
                return count;
            }
        }
 
        static void Main(string[] args)
        {
            string[] inputArr = Console.ReadLine().Split();
            int n = int.Parse(inputArr[0]);
            int k = int.Parse(inputArr[1]);
            Console.WriteLine(CountPaths(k, n));
            Console.ReadKey();
        }
    }
}
Добавлено через 50 секунд
Если как я написал то ругается говорит индекс находился не в границ массива
C#
1
2
3
 string[] inputArr = Console.ReadLine().Split();
            int n = int.Parse(inputArr[0]);
            int k = int.Parse(inputArr[1]);
Добавлено через 1 минуту
Элд Хасп, Но не чего не показывает если исправить ошибку таким образом в чём проблема то ?
C#
1
2
3
4
5
string[] inputArr = Console.ReadLine().Split(' ');
            int n = int.Parse(inputArr[0]);
            int k = int.Parse(inputArr[1]);
            Console.WriteLine(CountPaths(k, n));
            Console.ReadKey();
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,144
Записей в блоге: 2
09.01.2020, 19:59
Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
А как в вашем коде сделать вод данных то решения надо дописывать а то не понятно как то
Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
Если как я написал то ругается говорит индекс находился не в границ массива
Может вы вводите неправильно?
Надо через пробел, в одну строку сначала n, потом k.

Я тестировал - у меня всё Ок работает.
0
42 / 15 / 1
Регистрация: 06.12.2019
Сообщений: 429
09.01.2020, 20:05  [ТС]
Элд Хасп, Да нет вожу верно всё скинь полный код не только один метод с водам
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,144
Записей в блоге: 2
09.01.2020, 20:06
Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
скинь полный код не только один метод с водам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
    class Program
    {
        /// <summary>Определение количество вариантов прохождения пути
        /// длинной N за К шагов</summary>
        /// <param name="k">Количество шагов</param>
        /// <param name="n">Длина пути</param>
        public static long CountPaths(int n, int k)
        {
 
            /// Количество шагов и длина пути должны быть
            /// оба чётны или нечётны
            if ((k + n) % 2 != 0)
                return 0;
 
            /// Словарь рассчитанных вариантов
            Dictionary<KeyValuePair<int, int>, long> calc = new Dictionary<KeyValuePair<int, int>, long>();
 
            return _сount(k, n);
            long _сount(int step, int length)
            {
                /// Если длина пути отрицательна, значит магазин уже пройден
                /// Если длина пути равна нулю, значит до магазина уже дошли 
                /// В обоих случаях вариантов сделать следующие шаги нет
                if (length <= 0)
                    return 0;
 
                /// Если количество шагов меньше длины пути, то вариантов нет
                if (step < length)
                    return 0;
 
                /// Если количество шагов равно длине пути, то вариант 1
                if (step == length)
                    return 1;
 
                /// Проверка рассчитывался ли уже такой вариант
                /// Если не рассчитывался, то его расчёт
                KeyValuePair<int, int> pair = new KeyValuePair<int, int>(step, length);
                if (!calc.TryGetValue(pair, out long count))
                {
                    /// Количество вариантов равно сумме вариантов
                    /// при шаге назад и при шаге вперёд
                    count =
                        _сount(step - 1, length + 1) // Шаг Назад
                        + _сount(step - 1, length - 1); // Шаг вперёд
                    /// Запись варианта в словарь
                    calc[pair] = count;
                }
                /// Возврат значения
                return count;
            }
        }
 
        static void Main(string[] args)
        {
 
            string[] inputArr = Console.ReadLine().Split();
            int n = int.Parse(inputArr[0]);
            int k = int.Parse(inputArr[1]);
            Console.WriteLine(CountPaths(n, k));
 
            Console.ReadKey();
0
42 / 15 / 1
Регистрация: 06.12.2019
Сообщений: 429
09.01.2020, 20:20  [ТС]
Элд Хасп, Выводит тоже ноль
5 6
0
Ты прикалываешься ?

Добавлено через 42 секунды
Элд Хасп, И на сайте тоже ноль

Добавлено через 4 минуты
Элд Хасп, Compilation error
main.cs(22,19): error CS1525: Unexpected symbol `(', expecting `,', `;', or `='
main.cs(22,30): error CS1525: Unexpected symbol `int', expecting `,', `;', or `='
main.cs(41,45): error CS1644: Feature `declaration expression' cannot be used because it is not part of the C# 6.0 language specification
main.cs(56,11): error CS1525: Unexpected symbol `void', expecting `class', `delegate', `enum', `interface', `partial', or `struct'
0
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
09.01.2020, 20:22
Элд Хасп,

Не по теме:

посчитай сколько уже постов ты ему написал. Ты что прикалываешься?

0
42 / 15 / 1
Регистрация: 06.12.2019
Сообщений: 429
09.01.2020, 20:26  [ТС]
jester, Хм ну если ответ выкладываете то пишите так что бы пользователь программы не думал что в коде до писать а брал ей и пользовался
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
09.01.2020, 20:36
Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
Выводит тоже ноль
5 6
0
Ты прикалываешься ?
Скажи, а как можно сделав шесть шагов, дойти до объекта, находящегося на расстоянии пяти шагов. Можешь даже встать, походить или порисовать.

Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
если ответ выкладываете то пишите так что бы пользователь программы не думал что в коде до писать а брал ей и пользовался
Совершенно согласен. Тем более есть пользователи, которые вообще не думают.
0
42 / 15 / 1
Регистрация: 06.12.2019
Сообщений: 429
09.01.2020, 20:50  [ТС]
Даценд, Ты сможешь до делать программу ?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,144
Записей в блоге: 2
09.01.2020, 21:50
Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
Выводит тоже ноль
5 6
0
Ты прикалываешься ?
С математикой совсем туго?
Это же уровень 4 класса!
За шесть шагов расстояние в пять шагов пройти невозможно!

Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
Compilation error
main.cs(22,19): error CS1525: Unexpected symbol `(', expecting `,', `;', or `='
main.cs(22,30): error CS1525: Unexpected symbol `int', expecting `,', `;', or `='
main.cs(41,45): error CS1644: Feature `declaration expression' cannot be used because it is not part of the C# 6.0 language specification
main.cs(56,11): error CS1525: Unexpected symbol `void', expecting `class', `delegate', `enum', `interface', `partial', or `struct'
Это не о чём не говорит, так как неизвестна нумерация строк в вашем файле.

Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
Ты сможешь до делать программу ?
Так чтобы на ввод "5 6" был ответ не ноль - никто не "доделает".

Цитата Сообщение от kauakutsatsauts Посмотреть сообщение
ну если ответ выкладываете то пишите так что бы пользователь программы не думал что в коде до писать а брал ей и пользовался
С такими запросами вы не в тот раздел обратились.
В этом разделе вам могут помочь сделать решение, изредка могут сделать его целиком или, вообще, не обратить внимание на вашу тему.
Большинство отвечающих здесь с целью убить излишек времени, отвлечься от реальных задач, но ни как не с целью сдавать за кого-то тесты, экзамены.

Нужны решения "под ключ" - обращайтесь в соответствующий раздел. Там если возьмутся решать вашу задачу, то сможете высказать и претензии к решению.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2020, 21:50
Помогаю со студенческими работами здесь

Как это сделать через listbox?
заполнить listbox рандомными числами, и по нажатию на кнопку1 вывести сумму эл-тов кратных 3, по нажатию на кнопку2 вывести среднее...

Как это сделать через мнр

Сделать сумму двух чисел в двоичной системе через рекурсию и функции
Задано два положительных числа в двоичной системе счисления.Составить программу вычисления суммы этих чисел,используя функцию сложения...

Подскажите как подобрать функцию или через какую программу это можно сделать?
подскажите пожалуйста как подобрать функцию или через какую программу это можно сделать если даны около (n-го количества) (сколько...

Надо добавить нового администратора через локальную политику домена. Как это сделать?!
Здравствуйте ОТЦИ и все кто рубит в Windows 2003... Начну сразу же с главного. Надо добавить нового администратора(локального), что бы он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru