Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Перестановки Добавлено: 09.04.07 14:05  

Автор вопроса:  Meteor
Помогите!!!!
Каким образом из m чисел вывести на экран по n чисел всевозможными способами, например, есть 3 числа(3,4,7) вывести по 2:
34, 37, 47
Спасибо.

Ответить

  Ответы Всего ответов: 17  

Номер ответа: 1
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #1
Добавлено: 09.04.07 16:55
____ Пусть есть массив A(1 to 100).
____ Тогда все перестановки из этого массива по два числа можно вывести следующим образом:
For i=1 To 99
  For j=i+1 To 100
    Msgbox A(i) & A(j)
  Next
Next


____ Для трёх — ещё один вложенный цикл.
____ Или надо общий случай для n?

Ответить

Номер ответа: 2
Автор ответа:
 Meteor



Вопросов: 2
Ответов: 6
 Профиль | | #2 Добавлено: 09.04.07 19:34
смысл как раз в том что для n? для заранее неизвестного n

Ответить

Номер ответа: 3
Автор ответа:
 Meteor



Вопросов: 2
Ответов: 6
 Профиль | | #3 Добавлено: 09.04.07 21:27
может как нибудь рекурсию использовать?

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 10.04.07 02:47
Каким образом из m чисел вывести на экран по n чисел всевозможными способами, например, есть 3 числа(3,4,7) вывести по 2:
34, 37, 47
Как так, из (3,4,7) получится

33
44
77
34
37
47
43
74
73

уточняй задание

Ответить

Номер ответа: 5
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #5 Добавлено: 10.04.07 12:54
1. Как стоят числа? (через запятую, через пробел, просто друг за другом или ещё как).
2. Откуда берутся числа? (вводит пользователь, из строки документа и т.д.).

Идея можно объединить все числа в одну строковую переменную а потом с помощью функиций типа Len, Left, Right и др. выполнить нужные действия без всяких циклов.

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 10.04.07 19:27
капец
1. Как стоят числа? (через запятую, через пробел, просто друг за другом или ещё как).
Имеет значение? Предположим в массиве.

2. Откуда берутся числа? (вводит пользователь, из строки документа и т.д.).
ещё лучше :)) От верблюда они беруться. Вот верблуд выплевывает, и нужно найти кол-во перестановок

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 10.04.07 20:43
Вообще-то это сочетания, а не перестановки

Ответить

Номер ответа: 8
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #8 Добавлено: 11.04.07 18:39
Вообще-то этот вопрос наверное больше относится к математике. Но кажется придумал. Попробую использовать вложенные циклы. Общее число полученных значений равно m^n. На бумаге уже пробовал - получилось. Получается таблица из n столбцов и n^m строк.

Ответить

Номер ответа: 9
Автор ответа:
 Meteor



Вопросов: 2
Ответов: 6
 Профиль | | #9 Добавлено: 11.04.07 20:59
а как это реализовтать с циклами если заранее неизвестно чему равно m и n.
числа содержаться в массиве

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 11.04.07 21:40
Рекурсивно, например

Ответить

Номер ответа: 11
Автор ответа:
 Meteor



Вопросов: 2
Ответов: 6
 Профиль | | #11 Добавлено: 12.04.07 11:00
проблема как раз в том чтобы написать рекурсию

Ответить

Номер ответа: 12
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #12
Добавлено: 12.04.07 11:18
____ Напрашивается интуитивно рекурсия, но на самом деле, если её и реализовать, то это будет всего лишь красивое решение. Проще просто написать цикл по формированию и выполнению "n" вложенных циклов. Я вижу как, но пока время не уделить.

Ответить

Номер ответа: 13
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #13
Добавлено: 12.04.07 15:28
Рекурсия была бы интересна кончено...

Но вот что у меня получилось (для Excel-решения):
(Запускать лучше при активном чистом листе, т.к. все существующие при запуске данные с листа удаляются.)

Sub Combinations()
    Dim mas() As Integer, cnt() As Integer, v As Variant, dm As Integer, lc As Integer, i As Integer
    
    v = Application.InputBox(Prompt:="Размерность массива?", Type:=1)
    If v = False Then Exit Sub
    dm = CInt(v)
    v = Application.InputBox(Prompt:="Сколько чисел в комбинации?", Type:=1)
    If v = False Then Exit Sub
    lc = CInt(v)
    
    If dm ^ lc > 65536 Then
        MsgBox "слишком много комбинаций: " & dm ^ lc
        Exit Sub
    End If
    
    ReDim mas(1 To dm)
    ReDim cnt(1 To lc)
'заполнение случайными целыми от 10 до 99
    For i = 1 To dm
        mas(i) = Int(Rnd((Now())) * 89) + 10
    Next i
    For i = 1 To lc
        cnt(i) = 1
    Next i
    l = lc
    ActiveSheet.UsedRange.Cells.ClearContents
    Do
        res = ""
        For i = 1 To lc
            res = res & " " & mas(cnt(i))
        Next i
        
        'Очередная комбинация
        Cells(WorksheetFunction.CountA(Columns(1)) + 1, 1).Value = LTrim(res)
           
        Do While l > 0
            cnt(l) = cnt(l) + 1
            If cnt(l) > dm Then
                cnt(l) = 1
                l = l - 1
            Else
                l = lc
                Exit Do
            End If
        Loop
    Loop While l > 0
    Columns(1).AutoFit
End Sub

Ответить

Номер ответа: 14
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #14 Добавлено: 12.04.07 17:31
а как это реализовтать с циклами если заранее неизвестно чему равно m и n.
числа содержаться в массиве

Т.к. получается таблица, то надо использовать только 2 цикла (один будет вложен в другой). Один цикл будет заполнять строки до n символов длиной, а другой будет из этих строк формировать таблицу до m^n строк.

65536-это слишком мало комбинаций. Лучше Long.

Ответить

Номер ответа: 15
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #15
Добавлено: 12.04.07 18:17
А все и сделано так, что заранее неизвесно... в первой половине происходит образование массива и его заполненеие случайными целыми, а собственно решение начинается со строки
l = lc


Далее, уж Вы как-то сами должны... хорошо? Ну, там пальцем о палец ударить, что ли...

(а 65536 - это только ограничение листа Excel (до ХР) - можете это изменять, как Вам хочется...

Оспаривать авторские права не собираюсь... но если Вы будете настаивать, то может быть и изменю это свое намерение.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам