0 / 0 / 0
Регистрация: 27.02.2010
Сообщений: 8
1

Перестановки

17.10.2010, 13:01. Показов 9328. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Никак не получается написать метод который выполняет перестановки.
есть какой-то массив
static int program []= {1, 2, 3};
нужно выполнить n! сочетаний то есть:
123
132
312
321
231
213
что то пытался написать но получается бред...help/
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2010, 13:01
Ответы с готовыми решениями:

Перестановки
class Transposer { public static void main(String args) { int pa = new int {1, 2, 3}; ...

Перестановки. Пермутации
суть в том, чтобы реализовать рекурсивный алгоритм перебора без повторений. Пример: abc abc, acb,...

Перестановки с повторениями
Доброго времени суток. Наткнулся на задачу с перестановка и по типу, есть массив целых чисел...

Перестановки элементов массива
Добрый день!Подскажите пожалуйста как на java написать перестановку элементов массива? Дан массив...

4
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 4
18.10.2010, 14:51 2
Ломаю голову над той же задачей. Для трёх чисел всё прекрасно получается, а для 4-ех и более - недостраивает какое-то количество перестановок. Вот код:

Java
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
private static void printR(int[] r){
for(int i=0;i<r.length;i++)System.out.printf(r[i]+" ");
System.out.println();
}
 
private static int[] rot(int[] a,int m){
int b[] = new int[m];
for(int i=0;i<m;i++){
b[i]=a[a.length-m+i];
}
int buf;
// for(int j=0;j<m;j++){
buf=b[0];
b[0]=b[b.length-1];
for(int i=b.length-2;i>0;i--){
b[i+1]=b[i];
}
b[1]=buf;
if(a.length==m)return b;
 
public static void main(String[] args){
int m=3; int cnt=0;
for(int i=0;i<=m;i++){
R=rot(R,m);
printR(R);
if(i==m-1){
{if(m-cnt==2){break;
}else{ R=rot(R,m-cnt-1);printR(R);i=0;}
// for(int j=0;j<n-cnt-2;j++){R=rot(R,n);printR(R);}
}
cnt++;}}
}
0
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
18.10.2010, 20:36 3
драфт

Java
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/**
 * Shift.java
 */
 
/**
 * TODO
 *
 * @author TanT
 * @version 1.0  17.10.2010 - TanT: initial creation
 */
public class Shift {
    
    /** */
    static int counter = 0;
    
    /**
     * @param args 
     */
    public static void main(String[] args) {   
 
        int[] arr = {0, 1, 2, 3, 4};
        printArr(null, arr);
        shifter(new int[] {}, arr);
    }
    
    /**
     * 
     * @param arrHead 
     * @param arrTail 
     */
    private static void shifter(int[] arrHead, int[] arrTail) {
        
        if (arrTail.length <= 1) {
            return;
        }
 
        for (int i = 0; i < arrTail.length; i++) {
            int[] arrBuf = arrTail.clone();           
            shiftOn(arrBuf, i);
            int[] arrNewHead = incrementArr(arrHead, arrBuf[0]);
            int[] arrNewTail = decrementArr(arrBuf);
            if (i != 0) {
                printArr(arrNewHead, arrNewTail);
            }
            
            shifter(arrNewHead, arrNewTail);           
        }
    }
 
    
    /**
     * @param arr
     * @param shift
     */
    private static void shiftOn(int[] arr, int shift) {
        if (shift % arr.length != 0) {
            reverse(arr, 0, shift - 1);
            reverse(arr, shift, arr.length - 1);
            reverse(arr, 0, arr.length - 1);
        }
       
    }
 
    
 
    /**
     * @param arr
     */
    private static int[] decrementArr(int[] arr) {
        
        int[] arrNext = new int [arr.length - 1];            
        for (int item = 0; item < arrNext.length; item++) {
            arrNext[item] = arr[item + 1];
        }
        return arrNext;
    }
    
    /**
     * 
     * @param arr
     * @param num
     * @return
     */
    private static int[] incrementArr(int[] arr, int num) {
        int[] arrNext = new int [arr.length + 1];            
        for (int item = 0; item < arr.length; item++) {
            arrNext[item] = arr[item];
        }
        arrNext[arr.length] = num;
        return arrNext;
    }
 
 
    /**
     * 
     * @param arrBuf
     * @param firstCycleElement
     * @param secondCycleElement
     */
    private static void reverse(int[] arrBuf, int first, int second) {
        int buf;
        
        int firstCycleElement = first % arrBuf.length;
        int secondCycleElement = second % arrBuf.length;
        
        buf = arrBuf[firstCycleElement];
        arrBuf[firstCycleElement] = arrBuf[secondCycleElement];
        arrBuf[secondCycleElement] = buf;
    }
    
    /**
     * 
     * @param arr
     */
    private static void printArr(int[] arrHead, int[] arrTail) {
        System.out.print(++counter + ": ");
        if (arrHead != null && arrHead.length != 0) {
            for (int item : arrHead) {
                System.out.print(item);
            }
        }
        if (arrTail != null && arrTail.length != 0) {
            for (int item : arrTail) {
                System.out.print(item);
            }
        }
       
        System.out.println();
    }
}
0
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 4
19.10.2010, 17:55 4
Огромное спасибо )
0
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 4
28.10.2010, 11:18 5
А можно ещё какое-нибудь словесное описание алгоритма(для курсача)? А то что-то не могу понять что и как делается. По коду всё ясно, а вот с точки зрения той же самой комбинаторики или математики... ) буду премного благодарен
0
28.10.2010, 11:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2010, 11:18
Помогаю со студенческими работами здесь

Шифр перестановки Сцитала
Уважаемые форумчане! Нужно создать Шифр перестановки Сцитала, он же шифр Древней Спарты. Программа,...

Перестановки цифр в числе
Здравствуйте, подскажите пожалуйста, как посчитать и вывести все перестановки цифр в числе(...

Сортировка массива методом перестановки
Всем здравствуйте. Только учусь программировать! Столкнулся с проблемой!!! Имеется код. Код...

Получить всевозможные перестановки элементов массива
Дан массив String ... Получить всевозможные перестановки элементов массива. Алгоритм реализовать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru