Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2010, 12:09   #1
pro100saniok
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 33
Вопрос C# Перестановки

Перечислить все возрастающие последовательности дли-
ны k из чисел 1..n в лексикографическом порядке.
(Пример: при n=5, k=2 получаем 12 13 14 15 23 24 25 34 35 45.)

вот решения,кто видеть ошибки исправьте :
Код:
 Console.WriteLine(" (k)");
            int k = int.Parse(Console.ReadLine());
            Console.WriteLine("(n)");
            int n = int.Parse(Console.ReadLine());
            int[] x = new int[k];
            for (int i = 0; i < k; i++)
            {
                x[i] = i + 1;
                Console.Write(x[i] + " ");
            }
            Console.WriteLine();
 
            int s = 0;
            while (true)
            {
                s = k - 1;
                while (!(x[s] < n - k + s + 1))
                {
                    s--;
                    if (s == -1)
                        break;
                }
                if (s == -1)
                    break;
                x[s] = x[s] + 1;
                for (int i = s + 1; i < k; i++)
                {
                    x[i] = x[i - 1] + 1;
                }
                for (int i = 0; i < k; i++)
                {
                    Console.Write(x[i]);
                }
                Console.WriteLine();
            }

помогите решить предыдущие задачу, заменив лексикографи-
ческий порядок на обратный (раньше идут те, которые больше в
лексикографическом порядке).
pro100saniok вне форума Ответить с цитированием
Старый 17.12.2010, 02:20   #2
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Вот тебе решение с 4 возможными выводами номеров , я просто не знал что именно тебе надо , сам уберешь вариант который тебе не нужен .

Код:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication20
{
    class Program
    {

        static void PrintNumbersSecVer(int[] x, int startNumber, int numOfnumbers, int number)
        {
            if (numOfnumbers == 0)
                Console.Write(number + "  ");

            for (int i = x.Length -1 ; i >= startNumber ; i--)
                PrintNumbersSecVer(x, i+1 , numOfnumbers - 1, number * 10 + x[i]);
        }

        static void PrintNumber(int[] x, int startNumber , int numOfnumbers , int number)
        {
            if (numOfnumbers == 0)
                Console.Write(number + "  ");

            for (int i = startNumber; i < x.Length; i++)
                PrintNumber(x, i + 1, numOfnumbers - 1, number * 10 + x[i]);
        }

        static void Main(string[] args)
        {
            Console.Write("(k) : ");
            int k = int.Parse(Console.ReadLine());
            Console.Write("(n) : ");
            int n = int.Parse(Console.ReadLine());

            int[] x = new int[n];

            for (int i = 0; i < n; i++)
                x[i] = i + 1;

            Console.WriteLine("\n\nNumbers Up\n");
            PrintNumber(x, 0, k, 0);

            Console.WriteLine("\n\nNumbers Down\n");
            PrintNumbersSecVer(x, 0, k, 0);

           
            for (int i = 0; i < n; i++)
                x[i] = n - i;

            Console.WriteLine("\n\nNumbers Up (Second version)\n");
            PrintNumbersSecVer(x, 0, k, 0);

            Console.WriteLine("\n\nNumbers Down (Second version)\n");
            PrintNumber(x, 0, k, 0);


            Console.ReadLine();
        }
    }
}
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 19.12.2010, 20:51   #3
pro100saniok
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 33
По умолчанию

Цитата:
Сообщение от andrewpalkin Посмотреть сообщение
Код:

 static void PrintNumbersSecVer(int[] x, int startNumber, int numOfnumbers, int number)
        {
            if (numOfnumbers == 0)
                Console.Write(number + "  ");

            for (int i = x.Length -1 ; i >= startNumber ; i--)
                PrintNumbersSecVer(x, i+1 , numOfnumbers - 1, number * 10 + x[i]);
        }

        static void PrintNumber(int[] x, int startNumber , int numOfnumbers , int number)
        {
            if (numOfnumbers == 0)
                Console.Write(number + "  ");

            for (int i = startNumber; i < x.Length; i++)
                PrintNumber(x, i + 1, numOfnumbers - 1, number * 10 + x[i]);
        }
кто то, может объяснить эти два методи или упростить задачу, чтобы не использовать эти методы ???
pro100saniok вне форума Ответить с цитированием
Старый 19.12.2010, 21:02   #4
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от pro100saniok Посмотреть сообщение
кто то, может объяснить эти два методи или упростить задачу, чтобы не использовать эти методы ???
И чем тебе не нравятся эти методы ? Ты хотел решение , оно у тебя есть и делает все отлично ! Но тебе надо упростить , куда уже проще

Эти оба метода печатают твои числа , один по возрастанию , а второй по убыванию . Оба метода рекурсивные .
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 20.12.2010, 00:34   #5
pro100saniok
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 33
По умолчанию

но все таки, кто может написать решения не используя рекурсию ?
pro100saniok вне форума Ответить с цитированием
Старый 21.12.2010, 00:12   #6
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от pro100saniok Посмотреть сообщение
но все таки, кто может написать решения не используя рекурсию ?
У тебя что , препод не принял эту работу ???
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перестановки символов mrkheggy Помощь студентам 7 12.12.2010 23:39
Перестановки N чисел SOKOLDANGER Общие вопросы C/C++ 0 10.10.2010 20:02
перестановки fedd Помощь студентам 2 27.11.2009 22:59
Перестановки H'orn Общие вопросы .NET 4 11.11.2009 03:08