Помогите создать цикл перебора
Помогите с алгоритмом перебора... Дано s клеточек, m подряд слева закрашены, n подряд справа закрашены, не соприкасаются. Нужно перебрать все возможные варианты.
Вот иллюстрация m=3 n=4 s=10... первый набор всегда должен лежать левее второго. 1110111100 1110011110 1110001111 0111011110 0111001111 0011101111 или более наглядно ***-****-- ***--****- ***---**** -***-****- -***--**** --***-**** В перспективе надо для любого числа наборов клеток... Хотя бы для двух сделать )) |
alexan0308,
Вариант))) <!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> var m=3, n=4, s=10; k = s-(m+n); for (var arr = [0, 0, 0]; k;) { for (var i = k; 0 < i;) arr[2] = --i, arr[1] = k - i, document.write(Array(arr[0] + 1).join("-") + Array(m + 1).join("*") + Array(arr[1] + 1).join("-") + Array(n + 1).join("*") + Array(arr[2] + 1).join("-") + "<br />"); k--; arr[0]++ }; </script> </body> </html> |
Впечатляюще... правда, не очень понятно... Может пояснишь?
Так то я решил проблему но твое решение интереснее. Я сделал так for (i1=0; i1<N-p-q+1; i1++) { for (i2=i1+p+1; i2<N-q+1; i2++) { for (k=0; k<N; k++) {variant[k]=0;} for (k=i1; k<i1+p; k++) {variant[k]=1;} for (k=i2; k<i2+q; k++) {variant[k]=1;} // что то делаю с выборкой } } тут p,q,N вместо p, q, s. Можешь очистить алгоритм от вывода, оставить только массив variant? |
alexan0308,
Длина разделителей равна остатку от общей длины за минусом двух длин занятых участков, стоять эти разделители могут только в трёх местах, осталось распределить))) в распределении есть закономерность согласно этой закономерности и составлен скрипт. например при к = 4 последний разделитель равен 3,2,1,0 - 2,1,0 - 1,0 - 0 у других разделителей своя закономерность. |
понятно... ладно уж я простыми циклами обойдусь =)
|
S=10; M=3; N=4; var out = [], i = 1, k, l, j, res; for ( ; i <= S - M - N; i++ ) { k = 0; l = (S - M - N) - i; for ( ; l > -1; l--, k++ ) { res = []; for ( j = k; j--; ) res.push('-'); for ( j = M; j--; ) res.push('*'); for ( j = i; j--; ) res.push('-') for ( j = N; j--; ) res.push('*'); for ( j = l; j--; ) res.push('-') out.push( res.join('') ); } } alert( out.join("\n") ) |
Часовой пояс GMT +3, время: 23:06. |