массив с n элементами с отличием на 2

Тема в разделе "PHP", создана пользователем Cannabis69, 6 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Cannabis69

    Cannabis69 Постоялец

    Регистр.:
    26 июн 2007
    Сообщения:
    66
    Симпатии:
    4
    нужно сделать чтобы создавался массив с N кол-вом элементов(их количество указывается в переменной), и чтобы каждый из элементов отличался ото-всех минимум 2. Сделал для 2х элементов, помогите сделать для N элементов
    Код:
    		do {
    			$random[1] = rand(1,$col-1);
    			$random[2] = rand(1,$col-1);
    		}
    		while ((($random[1]-$random[2])<2) and (($random[2]-$random[1])<2));
     
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    PHP:
    <?php
    $count 
    10// количество элементов в массиве.
    for ($i 0$i $count$i++) {
        
    $random[] = rand(199999);
    }
    print_r($random);
    ?>
    Все значения друг от друга, будут разнится друг от друга минимум на 2) По теории вероятности, процент следования друг за другом будет очень мелкий.

    А вообще условие непонятное, очень много неясностей.
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    Если это домашнее задание, то лучше сделать так, чтобы не придерались:
    PHP:
    $count 10// количество элементов в массиве. 
    $random = array();
    for (
    $i 0$i $count$i++) { 
     
    $num=  @max($random)+ rand(299999);
        
    $random[] = $num
     
  4. Cannabis69

    Cannabis69 Постоялец

    Регистр.:
    26 июн 2007
    Сообщения:
    66
    Симпатии:
    4
    это не то, поставил рандом от 1 до 30 скрипт выдал
    Код:
    Array ( [0] => 25 [1] => 18 [2] => 27 [3] => 25 [4] => 6 [5] => 30 [6] => 6 [7] => 29 [8] => 13 [9] => 10 ) 
    то есть, некоторые различаются менее чем на 2, некоторые даже одинаковые. :(
    рандом мне нужен не из больших чисел, а чисел 40 в среднем, так что не подходит
     
  5. a1ien.n3t

    a1ien.n3t Постоялец

    Регистр.:
    12 июл 2008
    Сообщения:
    52
    Симпатии:
    7
    Cannabis69,
    Если вы взяли тот код что вам дал KillDead то у вас немогу получиться такой масив. Так как в этом примере кажый следующий элемент будет бльше предыдущего максималоного минимум на 2.
    Или вас такое тоже не катит чтобы каждый следующий был бльше максимального?
    да в его примере можно заменить
    rand(2, 99999); на rand(2, 10); например тогда следующий будет больше предыдущего на (2-10) значений
     
  6. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Ну, а почему этого нельзя сразу сказать? Потом напишешь, что цифры должны идти по порядку, и не должны превышать в расстоянии больше 5 и т.д.
    Давайте жить дружно и говорить конкретней =)


    Как тебе такой вариант:

    PHP:
    <?php
    $count 
    10;
    for (
    $i 0$j 1$i $count$i++) {
        
    $j $j rand(28);
        
    $random[] = $j;
    }
    shuffle($random);
    print_r($random);
    ?>
     
  7. Cannabis69

    Cannabis69 Постоялец

    Регистр.:
    26 июн 2007
    Сообщения:
    66
    Симпатии:
    4
    хорошо, будем жить дружно, вот весь скрипт:
    Код:
    <?
    $col_keys = "4";
    $text_key = "КЕЙ";
    $prom = "2";
    $s="тут написан какой-то определенный текст в котором должны вставляться ключи в количестве $col_keys через промежуток не менее $prom слова";
    $nl = explode(" ", $s);
    $col = count ($nl);
    		do {
    			$random[1] = rand(1,$col-1);
    			$random[2] = rand(1,$col-1);
    			$raz = $random[1]-$random[2];
    			echo $raz;
    		}
    		while ((($random[1]-$random[2])<2) and (($random[2]-$random[1])<2));
    	for ($i = 1; $i < $col; $i++)
    	{
    			for ($n = 1; $n < $col_keys; $n++) {
    				if ($i==$random[$n]) {
    				echo "<b>".$text_key."</b> ";
    				}
    			} 
    		echo $nl[$i]." ";  
    	}
    ?>
    он делит текст на слова, и должен вставлять кеи через установленный промежуток и в установленных количествах.

    напомню, что я сделал чтобы он работал с 2мя кеями, но как сделать чтобы кеев можно было расставлять и 1, и 5 и 10, в зависимости от настройки? :ah:
     
  8. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Держи

    PHP:
    <?php
    $count_keys 
    '4';
    $keyword    'КЕЙ';
    $go         '2';
    $text       ='тут написан какой-то определенный текст в котором должны вставляться ключи в количестве $col_keys через промежуток не менее $prom слова';
    $words      explode(' '$text);

    $count 0;
    for (
    $i 0$size sizeof($words); $i $size$i+=$go) {
        if (
    $count == $count_keys) {
            break;
        }
        
    $words[$i] = $words[$i].' '.$keyword;
        
    $count++;
    }
    $text implode(' '$words);
    echo(
    $text);
    ?>

    p.s. имхо неудобно будет тебе каждый раз телепать параметр
    PHP:
    $go
    чтобы равномерно распределить кей по тексту.
    Гораздо проще былобы ,чтобы скрипт сам определял через сколько промежутков надо сувать кей, чтобы получился текст с равномерно-распределенным кеем. Ну как в обычных доргенах, задаешь процент и задаешь кей ,а скрипт сам вставляет.
     
    Cannabis69 нравится это.
  9. Cannabis69

    Cannabis69 Постоялец

    Регистр.:
    26 июн 2007
    Сообщения:
    66
    Симпатии:
    4
    почти то, 1 но - кей должен вставляться в случайных местах, как у меня в примере, вовсе ненужно чтобы он вставлялся через каждые 2 слова, нужно чтобы всатвлялись через 2+ слов случайным образом.
     
  10. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Тогда вот так
    PHP:
    <?php
    $count_keys 
    '4';
    $keyword    'КЕЙ';
    $go         '2';
    $text       ='тут написан какой-то определенный текст в котором должны вставляться ключи в количестве $col_keys через промежуток не менее $prom слова';
    $words      explode(' '$text);

    $count 0;
    for (
    $i 0$size sizeof($words); $i $size;) {
        
    $i += rand($go3);
        if (
    $count == $count_keys) {
            break;
        }
        
    $words[$i] = $words[$i].' '.$keyword;
        
    $count++;
    }
    $text implode(' '$words);
    echo(
    $text);
    ?>
    Идет рандом от параметра $go до 8

    PHP:
    $i += rand($go3);
     
    Cannabis69 нравится это.
Статус темы:
Закрыта.