Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
0 / 0 / 1
Регистрация: 16.01.2014
Сообщений: 24

Напечатать все последовательности длины k из чисел от 1 до N

11.05.2015, 04:14. Показов 7939. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, коллеги) Помогите пожалуйста написать алгоритм на C# (для консоли).

Суть:
Напечатать все последовательности длины k из чисел от 1 до N.
То есть пользователь вводит число n, и k и ему выводится результат.

Пример:
k = 3 (дли 3 символа)
N = 2 (из цифр от 1 до 2)

Результат:
111
112
121
122
222
221
211
212

Многобукв.
Кликните здесь для просмотра всего текста

Перелопатил весь форум и интернет, ничего подходящего не нашел. А те варианты что находил не работают. Кстати, насколько я понял эта вещь делается при помощи Алгоритма Нарайаны.

Реализовано на Паскале:
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 program Sequences;
      type Sequence=array [byte] of byte;
      var M,N,i:byte;
      X:Sequence;
      Yes:boolean;
      procedure Next(var X:Sequence;var Yes:boolean);
    var i:byte;
      begin
    i:=N;
    {поиск i}
    while (i>0)and(X[i]=M) do begin X[i]:=1;dec(i) end;
    if i>0 then begin inc(X[i]);Yes:=true end
    else Yes:=false
      end;
    begin
      write('M,N=');readln(M,N);
      for i:=1 to N do X[i]:=1;
      repeat
    for i:=1 to N do write(X[i]);writeln;
    Next(X,Yes)
      until not Yes
    end.


Реализовано на C# (но без повторений):
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        private static char[] _charArray;
        private static List<int> _ints = new List<int>();
        private static string _result = String.Empty;
 
        static void Main(string[] args)
        {
            Console.WriteLine("Введите число");
            _charArray = Console.ReadLine().ToCharArray();
            Console.WriteLine();
 
            for (int i = 0; i < _charArray.Length; i++)
            {
                _ints.Clear();
                _ints.Add(i);
                string res = _charArray[i].ToString();
                AddChar(res, 1);
            }
 
            Console.ReadLine();
        }
 
 
        static void AddChar(string line, int n)
        {
            line = line.Substring(0, n);
            for (int i = 0; i < _charArray.Length; i++)
            {
                _ints.RemoveRange(n, _ints.Count - n);
                if (_ints.IndexOf(i) < 0)
                {
                    _ints.Add(i);
                    line = line.Substring(0, n);
                    line += _charArray[i];
                    if (n == _charArray.Length - 1)
                    {
                        if (_result.IndexOf(line) < 0)
                        {
                            _result += line;
                            Console.WriteLine(line);
                        }
                    }
                    else AddChar(line, n + 1);
                }
            }
        }
    }
}


Подсказочка(может кому-нибудь понадобится):
Кликните здесь для просмотра всего текста
Hапечатать все последовательности длины N из чисел 1,2,...,M.
First = (1,1,...,1) Last = (M,M,...,M)

Всего таких последовательностей будет M^N (докажите!). Чтобы понять. как должна действовать процедура Next, начнем с примеров. Пусть N=4,M=3. Тогда:
Next(1,1,1,1) -> (1,1,1,2) Next(1,1,1,3) -> (1,1,2,1) Next(3,1,3,3) -> (3,2,1,1)

Теперь можно написать общую процедуру Next:

Pascal
1
2
3
4
5
6
     procedure Next;
       begin
         {найти i: X[i]<M,X[i+1]=M,...,X[N]=M};
         X[i]:=X[i]+1;
         X[i+1]:=...:=X[N]:=1
       end;
Если такого i найти не удается, то следующей последовательности нет - мы добрались до последней (M,M,...,M).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.05.2015, 04:14
Ответы с готовыми решениями:

Напечатать все последовательности длины k из чисел 1.n
извиняюсь за повтор, но в похожих темах ответов нет

Задача на комбинаторику. Напечатать все последовательности длины k из чисел 1..n
Напечатать все последовательности длины k из чисел 1..n (если не трудно, напишите комментарии с пояснениями)

Напечатать все последовательности длины N из чисел 1,2,...,M
Напечатать все последовательности длины N из чисел 1,2,...,M.

3
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
11.05.2015, 07:10
Цитата Сообщение от Тони599 Посмотреть сообщение
Напечатать все последовательности длины k из чисел от 1 до N.
неверно!
не из чисел, а из ЦИФР:
"Напечатать все последовательности длины k из цифр от 1 до N"

Добавлено через 6 минут
что же касается решения - так код приведённый вами (по крайней мере на паскале) - РАБОЧИЙ.
только там переменные по другому называются и вводятся в другом порядке: M - это цифры от 1 до M, а N - это длина последовательности
0
0 / 0 / 1
Регистрация: 16.01.2014
Сообщений: 24
11.05.2015, 07:40  [ТС]

Не по теме:

Sergio Leone, великолепно, вы очень умны.



Все еще жду помощи...
0
0 / 0 / 1
Регистрация: 16.01.2014
Сообщений: 24
13.05.2015, 17:02  [ТС]
Немного не тот код на C# дал. Вот рабочий (без повторений). Нужно сделать чтобы было с повторениями. Еще если вводить длину 3 а n=2, то почему то тройка тоже присутствует в результате, хотя не должна. Это пример из первого поста.

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
class Program {
    static void Main(string[] args) {
        Console.Write("Введите n (от 1 до n): ");
        int n = int.Parse(Console.ReadLine());
        Console.Write("Введите k (длинна): ");
        int k = int.Parse(Console.ReadLine());
        int[] ar = new int[k];
        for (int i = 0; i < ar.Length; i++)
            ar[i] = i + 1;
        k = 0;
        do {
            Console.WriteLine("{0}:  {1}", ++k, string.Join<int>(" ", ar));
        } while (NextCombination(n, ar));
        Console.ReadLine();
    }
 
    static public bool NextCombination(int n, int[] part) {
        int i = part.Length - 2, col = 0;
        while (i >= 0) {
            if (++part[i] < n - col) break;
            i--; col++;
        }
        if (i < 0) return false;
        for (; i < part.Length - 1; i++) {
            part[i + 1] = part[i] + 1;
        }
        return true; 
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2015, 17:02
Помогаю со студенческими работами здесь

Напечатать все возрастающие последовательности длины m элементами которых являются натуральные числа от 1 до n
Напишите программу, которая печатает все возрастающие последовательности длины m элементами которых являются натуральные числа от 1 до n...

Алгоритм предъявляющий все последовательности длины N из чисел 1,.,M
Помогите пожалуйста составить алгоритм выводящий из данного максимального элемента(n) и длины последовательности(k) все последовательности...

Перечислить все возрастающие последовательности длины k из чисел 1.. N в лексикографическом порядке
Задание: Перечислить все возрастающие последовательности длины k из чисел 1..n в лексикографическом порядке. (Пример: при n=5, k=2...

Напечатать все слова четной длины
Дан текст. Напечатать все слова четной длины. Дублирование тем запрещено правилами форума (п. 3.4). Не плодите одинаковых тем.

Напечатать все слова наименьшей длины
Добрый вечер. Последняя лаба - допуск к экзамену. Условие: Дан файл, содержащий последовательность слов, отделенных друг от друга...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru