Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Ну намудрил с названием начало темы тут Ну-с попорядку... Дана таблица 3 на 15(3 колонны и 15 строк), в каждой строке таблицы находится один символ(например звездочка *) пример такой таблицы см. рис1
Задача: узнать все варианты и количество таблиц с размещением этих звездочек без повторений Условий два:
Quote (условие1)
в строке таблице должен находится только один знак * в какой колонке не важно, главное один(в каждой строке возможны всего 3 варианта см. рис2)
Quote (условие2)
Недолжно быть одинаковых таблиц, т.е. с одинаковым размещением звездочек (см. рис3)
Наглядный пример: Дана таблица 3 на 2(3 колонны и 2 строк) Задача: необходимл вычеслить все комбинации растановки звездочек в клетках и вывести результат Условия:в строке таблице должен находится только один знак * и без повторений Решение:......... Результат:Всего комбинаций (3^2)=9. результат см. рис4
У кого какие мысли по реализации?! . в архиве начало...
ну да, обычно я украшательства делаю в конце, когда программка робит...эххх, а она не робит Ладно подождем гуру, они то быстро подскажут какую насыпь рыть
3^3=27, 15^3=3375, 15^15=437893890380859375 Пока не понял что же ты в принципе хочеш,сначала надобы озвучить проблему на человеческом языке. Потом, я уж тебе говорил-табличные преобразования, это тупо означает следующее- утебя есть ряд входных цыфр для которых есть некое выходное соответствие, просто набиваеш массив в котором входящие числа это его индекс, выходящие -значения в массиве для этого индекса. Такая штука позволяет делать преобразования чисел не имеющих никакой логической последовательности. Такие методы применяются, к примеру, в звуковых кодеках, в часности мр3. Недостатки метода-он требует определенного объема памяти, достоинство-чрезвычайная скорость преобразования и простота.
Добавлено (06 Июнь 2010, 12:51) --------------------------------------------- К примеру, семисегментный дешифратор, на вход подается двоичный код числа, а на выходе мы имеем какие сегменты надо зажечь что бы увидеть соответствующую цифру на индикаторе. Так вот, сушествуют дешифраторы устроеные как на логике так и на таблице (просто зашитый в пзу массив). И тут нет разницы для чего это делается, микросхемы и программы. В программе первый способ это вычисление выходной цифры по определенному алгоритму, второй просто считывание из массива.
Я тут тоже начиркал, но результат странный получается
Code
<?php //перебора всех возможных комбинаций элементов "массива", //так, чтобы ни один элемент не повторялся // //определяем переменые $arr[0]="x";//это образна метка $arr[1]="_";//это путота $arr[2]="_";//тоже путота $arr2=array(); //I-этап создаю массив for ($i = 0; $i < pow(15,3); $i++){//количество вариантов for ($k = 0; $k < 3; $k++){ for ($l = 0; $l < 3; $l++){ for ($m = 0; $m < 3; $m++){ $arr2[]=$arr[$k].$arr[$l].$arr[$m];//каждую комбинацию в массив //результат получется такой //x__ //_x_ //__x //все это добро помещаю в массив } } } } //II-этап вывод $result=array_unique($arr2);//сортирую массив на повторяющий результат echo '<br>-----------------(SORT)-----------------<br>'; function sorting($key) { if(substr_count($key,'x')==1){//еще ожна сортировка, если встречаются //по два значения то удалять, т.е. //хх_ //ххх //х_х //должно быть строго одна метка в значении echo $key.'<br>';// выводим на экран //Вот тут и получается странность //Результат вывел всего 3 вариант <img rel="usm" src="http://neobooker.ru/Smiles/ab.gif" border="0" align="absmiddle" alt=":)"> } } array_walk_recursive($result, 'sorting'); echo '<br>-----------------(OK)-----------------<br>'; ?>
толком нифига не нашел, попробую объяснить своими словами: Мне надо вывести все возможные комбинаций из примера на картинке в сполере т.е. нужен некий алгоритм по перебору комбинаций без поворений в 3-х столбовой и 15-ти строчной таблицы колл-во вариантов более 14 мулиёнов Вот я и не знаю как реализовать этот алгоритм
Добавлено (07 Июнь 2010, 04:15) ================================================ Тут знакомый инжинер пытался мне помочь по сабжу и предложил, свой(как он говорит-"простой") вариант(pdf-181Кб). но с этими "15 разрядное число в троичной системе счисления" нифига не понял, как мона прикрутить к делу Набросал скрипт по переводу из троичной в десятеричную и обратно, возможно оно и легче, но в каком месте легче Во жесть
Quote (Alex3A)
следующее- утебя есть ряд входных цыфр для которых есть некое выходное соответствие, просто набиваеш массив
на 70 000 комп уходит в бсдос с разными стопами, на НБ такие цыклы не дело тут нужен математик, который с ней на ты (как Rush)
Добавлено (07 Июнь 2010, 12:00) --------------------------------------------- Вроде нашел похожую тему на мой сабж: наз-ся: Сочетания без повторений, даже формулу нарисовали
я ее в проге значит делаю так:
Code
var n=15//всего строк var m=3//всего колонок var count=pow(m,n)//всего комбинаций //factor=факториал //for(var g<count)to for(i<n)to for(j<m)to out=factor(n)/factor(m)*factor(n-m) end end //end
и всеравно одинаковые значения где то путаю значения, а где не могу найти....
var n=15//всего строк var m=3//всего колонок var count=pow(m,n)//всего комбинаций //factor=факториал //for(var g<count)to for(i<n)to for(j<m)to out=factor(n)/factor(m)*factor(n-m) end end //end
ты пытаешься посчитать кол-во комбинаций? или вывести?
да, это и есть мой вариант Тут есть еще расуждения по поводу колличества Как описывалось выше имеется таблица 3 х 15 = 45 клеток в ней имеем количество комбинаций = 14'349'807 Получается, что, всего таких таблиц будет 14'349'807 / 45 = 318'884,6 шт. Так ли это?! Или 14'349'807 это и есть кол-во таличек?!
Сообщение отредактировано Сергей - Вт, 08 Июня 2010, 11:02
Ты сначала определись что все же тебе надобно, перебрать все возможные варианты чисел или сколько вариантов табличек у тебя будет. В общем ты должен сформулировать свою задачу, необходимые правила и условия, и по пунктам.
Опять ты не полностью озвучил задачу, таблица это средство просмотра или условие комбинации. Таким образом, как я понял, тебе надо сделать все допустимые варианты таблиц?, допускаются ли одинаковые значения в строках разных таблиц? будут ли корректны две таблицы имющие разницу только в одной строке. Тоесть полный перебор?
таблица это средство просмотра или условие комбинации.
и то и другое, я приминил слово таблицы, т.к. оно подходит можно назвать и сетка 3 на 15, как в игре садоку, только там могут заполняются ячейки по всей горизонтали более одного раза, в моем варианете по всей горизотали заполняется только дна ячейка
Quote (Alex3A)
надо сделать все допустимые варианты таблиц?
да
Quote (Alex3A)
допускаются ли одинаковые значения в строках разных таблиц?
да, главное, чтоб небыло точной копии одной таблицы(в целом) с другой, полное совпадение не допустимо
Quote (Alex3A)
будут ли корректны две таблицы имющие разницу только в одной строке.
да, так тоже можно, да так и будет, ведь будет перебор
Quote (Alex3A)
Тоесть полный перебор?
да, полный перебор
Сообщение отредактировано Сергей - Вт, 08 Июня 2010, 16:49
Да,это и есть колличество таблиц. Колличество звезд, по моему, будет колличество таблиц умноженное на колличество строк. Тоесть на 15.
Добавлено (08 Июнь 2010, 23:43) --------------------------------------------- Сергей, пробовал реализовать, но слишком голову ломать приходится код не выкладываю, все равно не доделан. Но шел по принципу(может и не правильно) прибавление 3. Слева на право. 1+3=4+3=7 и т.д Заполняется вертикаль 1,4,7,10.... до 45. Вычитаем 45-43=2. 2+3=5+3...., заполняем втору вертикаль, и т.д. После нужно заполнить горизонтали.45-44=1+4=5+4=9....45-43=2+4...45-42=3+4... Вот сдесь в конце нужно покумекать чего от чего вычесть.И где чего прибавить Начни со свойх же двух рядов, когда конечный принцип найдешь, он будет действовать ко всей таблице.Весь цикл происходит до 14'349'807. Тоесть 15 раз прогцал, 1. Еще 15, 2 и т.д. 14'349'807 * 15 Мож я и не прав Вы тут уж какой день бьетесь.
mishem, такой принцип "Сочетания без повторений" строится по формулам, типа такого P=m!/((m-n)!*n!) где m!,(m-n)!,n!= факториал этих чисел Но реализовать по этим формулам не получилось, вот например: Если требуется выбрать m предметов из n, и при этом порядок выби- раемых предметов безразличен, то формула m!(n-m)! т.е. 3!*(15-3)!
Code
.определяем переменые для n и m SetVar "[m]" "3" SetVar "[n]" "15" .факториал для m Call "JavaScript\factorial" "[m]" "[fM]" .вычитание в скобках (n-m) Math "[n]-[m]" "" "[mn]" .факториал для числа в скобках Call "JavaScript\factorial" "[mn]" "[fG]" .умножение Math "[fM]*[fG]" "" "[result]"
result=2874009600 полученый результат мне ни очем не говорит, а потому я не понял, как это все прикрутить к моей задачи, да еще и в цикле поместить
то результатом будет звонкое блям(Ошибка: переполнение стека), а если в место переменой [i] поставить [n], то результат, есно будет один и тот же на всех проходах Короче, я так и не смог разобратся, хотя примеров в сети валом...
Сообщение отредактировано Сергей - Ср, 09 Июня 2010, 08:00
и при этом порядок выби- раемых предметов безразличен
А у тебя есть определенное условие. Тоесть по этой формуле идет подсчет и 2х и 3х вариантов в одной строке. ИМХО.
Добавлено (09 Июнь 2010, 14:36) --------------------------------------------- Не гонись сразу за 15ю строками. У тебя же есть отладчик. Возьми 1-2 строки, и пошагово посмотри как все действует.
это тут не причем... вообще, в тестах я использую таблицу из "Наглядного примера" в первом посте(3х2) там всего 9 вариантов. но как сделать механизм распределения звездочек в нужной ячейки в нужной таблице
Сообщение отредактировано Сергей - Ср, 09 Июня 2010, 16:22
Ну, посмотрел Или я что то не понял. Или ты не понял 22 пост. Одним циклом не обойтись. Минимум 2, если не 3-4.Впринципе я и сам не уверен что прав. В твоей задаче есть закономерность, и она наверняка решается просто, но у меня мозгов сейчас не хватит. Лет бы 20 назад. Я уже забыл как прибавлять и умнажать, зато знаю как делить и отнимать. Шутка. Не хочешь читать хелп?
хм, а если таблицу обозначить, как в екселе вверху буквы, с лева цифры, потом в массив те цыфры и буквы, где стоят метки, а повторения из массива выкинуть. Получится интересно...