42 / 15 / 1
Регистрация: 06.12.2019
Сообщений: 429
.NET 4.x

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

09.01.2020, 11:51. Показов 2558. Ответов 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
 Аватар для Элд Хасп
16151 / 11272 / 2890
Регистрация: 21.04.2018
Сообщений: 33,145
Записей в блоге: 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
 Аватар для Элд Хасп
16151 / 11272 / 2890
Регистрация: 21.04.2018
Сообщений: 33,145
Записей в блоге: 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
 Аватар для Элд Хасп
16151 / 11272 / 2890
Регистрация: 21.04.2018
Сообщений: 33,145
Записей в блоге: 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
 Аватар для Элд Хасп
16151 / 11272 / 2890
Регистрация: 21.04.2018
Сообщений: 33,145
Записей в блоге: 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
 Аватар для Элд Хасп
16151 / 11272 / 2890
Регистрация: 21.04.2018
Сообщений: 33,145
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru