|
|
|
| Здравстуйте.
Попробовал вручную расписать - чуть глаза не сломал ))). Решил что надо всё таки програмно как-то...
Помогите пожалуйста - никогда с такой задачей не сталкивался. Нужно найти все комбинации из 8-ми слов, слов может быть только 2-а: "да" и "нет". Получается всего комбинаций должно быть 2^8=256.
Что-то типа такого:
нет да да да нет да да нет
да нет да нет да нет да да
да да нет да нет да нет да
нет да да нет да да да нет
.....
и т.д..
------------------------------------------
|
нужно считать в двумерный массив:
$array[0][0] = "нет";
$array[0][1] = "да";
$array[0][2] = "да";
$array[0][3] = "да";
$array[0][4] = "нет";
$array[0][5] = "да";
$array[0][6] = "да";
$array[0][7] = "нет";
$array[1][0] = "да";
$array[1][1] = "нет";
$array[1][2] = "да";
$array[1][3] = "нет";
$array[1][4] = "да";
$array[1][5] = "нет";
$array[1][6] = "да";
$array[1][7] = "да";
....
и т.д..
|
| |
|
|
|
|
|
|
|
для: simbel
(11.03.2010 в 02:10)
| | Комбинация из восьми, это от 00000000 до 11111111, для вашего случая от "нет нет нет нет нет нет нет нет" до "да да да да да да да да". У вас же какая-то странная логика в массиве. | |
|
|
|
|
|
|
|
для: sim5
(11.03.2010 в 04:39)
| | +1) И комбинация будет занимать всего 1 байт. А для чего это? Случайно не для теста какого нибудь? | |
|
|
|
|
|
|
|
для: sasha1133
(11.03.2010 в 11:20)
| | Нет, это не для теста. )) | |
|
|
|
|
|
|
|
для: sim5
(11.03.2010 в 04:39)
| | Да вобщем-то так, наверное начинать надо с "да да да да да да да да " и заканчивать "нет нет нет нет нет нет нет нет" - так было бы правильней. Я просто случайные врианты в массив поместил, без какой-либо логики. | |
|
|
|
|
|
|
|
для: simbel
(11.03.2010 в 12:50)
| | Трудно сказать, что для вас правильней. Это в электронике существует положительная и отрицательная логика.
А зачем порождать такой массив, для какой цели? | |
|
|
|
|
|
|
|
для: sim5
(11.03.2010 в 13:13)
| | это просто так совпало что получиллась двоичная система исчисления - делаю что-то типа фильтра данных - в нём есть 8 выпадающих списков (могло быть сколько угодно - под двоичную систему специально не подстраивал), каждый из которых содержит два значения "да" и "нет". И вот в зависмости от комбинаций значений в этих выпадающих списках - будут производиться различные выборки данных. Но для начала нужно сгенерить все возможные комбинации в массив. На основе комбинаций сформировать потом код который будет фильтровать. Вобщем, там не простой фильр, я с такой задачей первый раз столкнулся. | |
|
|
|
|
|
|
|
для: simbel
(11.03.2010 в 15:05)
| | Для того, чтобы узнать состояние, достаточно проверить число само, и коли уж так необходимо, заменить в нем 0 на одно слово, и 1 на другое, а вот массив создавать для этого нет никакой необходимости. | |
|
|
|
|
|
|
|
для: simbel
(11.03.2010 в 02:10)
| |
for ($i = 1; $i < 32; $i ++) {
for ($j = 1; $j < 8; $j ++) {
$array[$i][$j] = если $j чёт, кладём "нет", иначе кладём "да"
}
}
|
| |
|
|
|
|
|
|
|
для: Yuriev
(11.03.2010 в 12:08)
| | бред | |
|
|
|
|
|
|
|
для: Yuriev
(11.03.2010 в 12:08)
| | Это немного не то - здесь получатся 256 одинаковых комбинаций:
да нет да нет да нет да нет
|
Мне же нужно получить все возможные неповторяющиеся комбинации из "да" / "нет". | |
|
|
|
|
|
|
|
для: simbel
(11.03.2010 в 12:56)
| | А у меня получается не 256 да нет да нет да нет да нет, а 128 да и 128 нет
И если брать триады $i, $j и содержимое по этим координатам, что и есть Ваша неповторяющаяся восьмёрка (2^3).
Но мой скрипт - незакончено и сложно. Сейчас попробую попроще. | |
|
|
|
|
|
|
|
для: simbel
(11.03.2010 в 02:10)
| | Если я правильно понял задание, то вот решение:
<?php
function ttod($k) //эту функцию (перевод из десятичного в двоичный вид числа) я спер на форуме, вот тут: http://www.softtime.ru/forum/read.php?id_forum=7&id_theme=23008
{
$dn = "";
while ($k >= 2)
{
$m = $dn;
$dn = $k%2;
$dn = $dn.$m;
if ($k%2 == 0)
{
$k = $k/2;
}
else
{
$k = ($k-$k%2)/2;
}
}
if ($k == 1) $dn = "1".$dn;
if ($dn == 1) $dn = "0".$dn;
return $dn;
}
$sub1 = "да "; // что пишем
$sub2 = "нет ";
$len = 8; // сколько "да/нет" в строке
$num = pow(2, $len); // сколько вариантов получится
for ($i = 0; $i < $num; $i ++){
// номер варианта превращаем в строку двоичного кода
$str = strval(ttod($i));
// достраиваем строку нулями до нужной длины
while(strlen($str) < $len) $str = "0".$str;
for($j = 0; $j < $len; $j++){
// ну и всё, проверяем j-тый символ, записываем в массив то, что надо.
if($str[$j] == "0") $x = $sub2; else $x = $sub1 ;
$arr[$i][$j] = $x;
}
}
//проверка
for ($i = 0; $i < $num; $i ++){
for($j = 0; $j < $len; $j++){
echo $arr[$i][$j];
}
echo "<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: DJ Paltus
(11.03.2010 в 14:42)
| | Достаточно проверить состояние каждого из восьми бит, заменив его на "нет" или "да". Зачем такой монстр? | |
|
|
|
|
|
|
|
для: sim5
(11.03.2010 в 14:54)
| | Я изначально был уверен, что есть гораздо более изящный метод, который мне, увы, недоступен. Однако, в теме не было ни одного стОящего ответа и надо было что-то делать ) | |
|
|
|
|
|
|
|
для: simbel
(11.03.2010 в 02:10)
| | Фига вы тут наворотили!
<?
$arr=array(0=>'Нет ', 1=>'Да ');
for($i=1; $i<256; $i++)
{
echo str_replace(array_keys($arr), $arr, sprintf('%08b', $i)).'<br />';
}
|
| |
|
|
|
|
|
|
|
для: Loki
(11.03.2010 в 15:04)
| | Всем спасибище большое за помощь! | |
|
|
|
|
|
|
|
для: simbel
(11.03.2010 в 15:11)
| |
<?
// Это сам код
$mas[] = array();
for ($i = 0; $i < 256; $i++) {
$octat = sprintf('%08s', decbin($i));
$octat = str_replace('0', 'nou ', $octat);
$octat = str_replace('1', 'yes ', $octat);
$octat = trim($octat);
$mas[$i] = explode(' ', $octat);
}
// А это для проверки
for ($i = 0; $i < 256; $i++) {
for ($j = 0; $j < 8; $j++) {
echo $mas[$i][$j].' ';
}
echo '<br />';
}
?>
|
| |
|
|
|
|
|
|
|
для: Loki
(11.03.2010 в 15:04)
| | for($i=0; $i<256; $i++)
конечно же:) | |
|
|
|